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;