Главная :: Программы для программирования :: wxWidgets :: Классы wxWidgets :: Класс wxDir
Хмурое утро, жена выгоняет интернетчика погулять с собакой. Он долго бродит с ней, потом поднимает палку, кидает ее и командует: - Э-э-э, Яндекс! То есть, Рамблер!! Тьфу, апорт!!!

Класс wxDir

wxDir портируемый эквивалент функций Unix open/read/closedir. Также хорошо подходит для подсчета содержимого директорий.

Подключение

#include "wx/dir.h"

Типы имен файлов

Следующие флаги определяют какой вид имени включен в список файлов, подсчитанных GetFirst/GetNext.

 
enum
{
    wxDIR_FILES     = 0x0001,       // включать файлы
    wxDIR_DIRS      = 0x0002,       // включать директории
    wxDIR_HIDDEN    = 0x0004,       // включать скрытые файлы
    wxDIR_DOTDOT    = 0x0008,       // включать символы перехода '.' и '..'

    // по умолчанию, считать все кроме '.' и '..'
    wxDIR_DEFAULT   = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN
}
 
wxDir::wxDir
wxDir()

Конструктор по умолчанию, после вызова использует Open().

 
wxDir(const wxString& dir)

Открывает директорию, используя IsOpened() во избежание ошибок.

 
wxDir::~wxDir
~wxDir()

Деструктор зачищает все используемые ресурсы.

 
wxDir::Exists
static bool Exists(const wxString& dir)

Проверка на существование указанной директории.

 
wxDir::GetAllFiles
static size_t GetAllFiles(const wxString& dirname, wxArrayString *files,
  const wxString& filespec = wxEmptyString, int flags = wxDIR_DEFAULT)

Функция помещает все имена файлов в директории dirname в массив files(помните, что старое содержимое сохраняется) . Берутся только файлы с указанной filespec, при неуказанном spec берутся все файлы.

Параметр flags должен всегда включать wxDIR_FILES или же массив не будет изменен, также следует включать флаг wxDIR_DIRS, для выполнения операции рекурсивно по подкаталогам.(Оба флага включены в значении по умолчанию)

 
wxDir::FindFirst
static wxString FindFirst(const wxString& dirname, const wxString& filespec,
  int flags = wxDIR_DEFAULT)

Функция возвращает путь первого файла с указанной filespec или же пустую строку, если таких файлов не найдено.

Параметр flags может включать, а может и не включать wxDIR_FILES, функция всегда ведет себя так, как будто этот параметр указан. По умолчанию flags включает wxDIR_DIRS, поэтому она проходит рекурсивно и по подкаталогам, но если флаг не указан, она будет работать только с указанной директорией.

 
wxDir::GetFirst
bool GetFirst(wxString* filename, const wxString& filespec = wxEmptyString, 
  int flags = wxDIR_DEFAULT) const

Начинает подсчет всех файлов, удовлетворяющих filespec(или всех файлов, если не указано каких именно) и flags, возвращает истину, если все прошло успешно.

 
wxDir::GetName
wxString GetName() const

Возвращает имя самой директории. Возвращаемая строка не содержит разделителей пути( слэшей или бэкслэшей).

 
wxDir::GetNext
bool GetNext(wxString* filename) const

Продолжить подсчет файлов, удовлетворяющих параметрам, указанными в последнем вызове wxDir::GetFirst.

 
wxDir::GetTotalSize
static wxULongLong GetTotalSize(const wxString& dir, wxArrayString* filesSkipped = NULL)

Возвращает размер в байтах всех файлов, в том числе и найденных рекурсивно, в случае ошибки - wxInvalidSize.

Случается так, что функция не может посчитать размер файла, тогда он будет помещен в массив filesSkipped , и если не NULL, тогда он будет пропущен. Такое случается, когда некоторые папки заблокированы операционной системой либо каким-то другим процессом. Помните, что когда filesSkipped->GetCount() не нуль, возвращенное функцией значение не есть 100% точное, и если размер пропущенных файлов велик, то это значение отнюдь не близко к реальному.

 
wxDir::HasFiles
bool HasFiles(const wxString& filespec = wxEmptyString)

Возвращает истину, если в директории содержатся файлы с указанными filespec. Если filespec пусто то функция ищет любые файлы. В любом случае будут приниматься во внимание даже скрытые файлы.

 
wxDir::HasSubDirs
bool HasSubDirs(const wxString& dirspec = wxEmptyString)

Возвращает истину, если каталог содержит подкаталоги (если задано значение filespec, то проверяет толькно на наличие директорий, удовлетворяющих ему). Скрытые папки также принимаются в расчет.

 
wxDir::IsOpened
bool IsOpened() const

Возвращает истину, если директория была успешно открыта предыдущим вызовом Open.

 
wxDir::Open
bool Open(const wxString& dir)

Открывает директорию для работы, возвращает истину, если удалось, ложь, если произошла ошибка.

 
wxDir::Traverse
size_t Traverse(wxDirTraverser& sink, const wxString& filespec = wxEmptyString,
  int flags = wxDIR_DEFAULT)

Рекурсивно считает все файлы и папки в заданной директории, вызывая елемент от объекта wxDirTraverse к каждому из них.

Более точно, функция будет рекурсивно заходить в подкаталоги, если flags будет содержать флаг wxDIR_DIRS. Она будет игнорировать файлы(но будет рекурсивно заходить в подпапки) если указан флаг wxDIR_FILES.

Для каждой найденной папки и файла будут вызнваны sink.OnDir() и sink.OnFile(). В зависимости от возвращенного значения, просмотр может быть продолжен или остановлен.

Функция возвращает полное количество найденных файлов либо (size_t)-1, если произошла ошибка.

Перевод: Сергей Воронков