Программирование для Windows NT

Просмотр содержимого каталога


Для просмотра содержимого каталогов в программном интерфейсе Microsoft Windows NT предусмотрены функции FindFirstFile, FindNextFile и FindClose. Просмотр с помощью этих функций выполняется в цикле.

Перед началом цикла вызовается функция FindFirstFile:

HANDLE FindFirstFile(

  LPCTSTR lpFileName,                // адрес пути для поиска

  LPWIN32_FIND_DATA lpFindFileData); // адрес структуры

                     // LPWIN32_FIND_DATA, куда будет записана

                     // информация о файлах

Через параметр lpFileName вы должны передать функции адрес строки, содержащей путь к каталогу и шаблон для поиска. В шаблоне можно использовать символы “?” и “*”.

   Через параметр lpFindFileData следует передать адрес структуры типа WIN32_FIND_DATA, в которую будет записана информация о найденных файлах. Эта структура определена следующим образом:

typedef struct _WIN32_FIND_DATA

{

  DWORD    dwFileAttributes;       // атрибуты файла

  FILETIME ftCreationTime;         // время создания файла



  FILETIME ftLastAccessTime;       // время доступа

  FILETIME ftLastWriteTime;        // время записи

  DWORD    nFileSizeHigh;     // размер файла (старшее слово)

  DWORD    nFileSizeLow;      // размер файла (младшее слово)

  DWORD    dwReserved0;            // зарезервировано

  DWORD    dwReserved1;            // зарезервировано

  TCHAR    cFileName[MAX_PATH];    // имя файла

  TCHAR    cAlternateFileName[14]; // альтернативное имя файла

} WIN32_FIND_DATA;

Если поиск завершился успешно, функция FindFirstFile возвращает идентификатор поиска, который будет затем использован в цикле при вызове функции FindNextFile. При ошибке возвращается значение INVALID_HANDLE_VALUE.

Заметим, что поля cFileName и cAlternateFileName структуры WIN32_FIND_DATA содержат, соответственно, длинное имя файла и короткое, альтернативное имя файла “в формате 8.3”.

После вызова функции FindFirstFile вы должны выполнять в цикле вызов функции FindNextFile:

BOOL FindNextFile(

  HANDLE hFindFile,                  // идентификатор поиска


  LPWIN32_FIND_DATA lpFindFileData); // адрес структуры

                                     // WIN32_FIND_DATA

Через параметр hFindFile этой функции следует передать идентификатор поиска, полученный от функции FindFirstFile. Что же касается параметра lpFindFileData, то через него вы должны передать адрес той же самой структуры типа WIN32_FIND_DATA, что была использована при вызове функции FindFirstFile.

   Если функция FindNextFile завершилась успешно, она возвращает значение TRUE. При ошибке возвращается значение FALSE. Код ошибки вы можете получить от функции GetLastError. В том случае, когда были просмотрены все файлы в каталоге, эта функция возвращает значение ERROR_NO_MORE_FILES. Вы должны использовать такую ситуацию для завершения цикла просмотра содержимого каталога.

После завершения цикла просмотра необходимо закрыть идентификатор поиска, вызвав для этого функцию FindClose:

BOOL FindClose(HANDLE hFindFile);

В качестве единственного параметра этой функции передается идентификатор поиска, полученный от функции FindFirstFile.


Содержание раздела