Программирование: FindFirst

Прототип

function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;

Описание

Получает информацию о первом файле, имя которого указано в параметре FileName. В случае успеха возвращает значение True.

Объявление структуры TFindRec:

  TFindRec = record
    Name: String;               // имя найденного файла (без пути)
    Attributes: Longword;       // атрибуты файла
    SizeHigh: Longword;         // размер файла, более 32 бит
    SizeLow: Longword;          // размер файла, менее 32 бит
    CreationTime: TFileTime;    // время создания файла
    LastAccessTime: TFileTime;  // время последнего доступа к файлу
    LastWriteTime: TFileTime;   // время последнего изменения файла
    AlternateName: String;      // короткое имя файла (если нет, пустая строка)
    FindHandle: THandle;        // дескриптор поиска
  end;

Объявление структуры TFileTime:

  TFileTime = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

Допустимые атрибуты файла следующие:

  FILE_ATTRIBUTE_READONLY
  FILE_ATTRIBUTE_HIDDEN
  FILE_ATTRIBUTE_SYSTEM
  FILE_ATTRIBUTE_DIRECTORY
  FILE_ATTRIBUTE_ARCHIVE
  FILE_ATTRIBUTE_DEVICE
  FILE_ATTRIBUTE_NORMAL
  FILE_ATTRIBUTE_TEMPORARY
  FILE_ATTRIBUTE_SPARSE_FILE
  FILE_ATTRIBUTE_REPARSE_POINT
  FILE_ATTRIBUTE_COMPRESSED
  FILE_ATTRIBUTE_OFFLINE
  FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
  FILE_ATTRIBUTE_ENCRYPTED

Комментарии

Если функция FindFirst возвращает значение True, используйте вызов функции FindNext, чтобы продолжить поиск. После завершения поиска обязательно вызовите функцию FindClose, чтобы освободить системные ресурсы, занятые процессом поиска.

Пример

В примере ниже подсчитывается количество файлов в системном каталоге Windows.

var
  FilesFound: Integer;
  FindRec: TFindRec;
begin
  FilesFound := 0;
  if FindFirst(ExpandConstant('{sys}\*'), FindRec) then begin
    try
      repeat
        // Исключаем из подсчёта каталоги
        if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
          FilesFound := FilesFound + 1;
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
  end;
  MsgBox('В каталоге System найдено ' + IntToStr(FilesFound) + ' файлов.',
    mbInformation, MB_OK);
end;

См. также:

FindNext
FindClose