FindFirst

Печать
Рейтинг пользователей: / 0
ХудшийЛучший 

FindFirst

Описание

function FindFirst ( const FileMask : string; Attributes : Integer; var SearchResult : TSearchRec ) : Integer;

Функция FindFirst ищет файлы, соответствующие FileMask и Attributes, возвращая первое соответствие (если найдено) в SearchResult.
Attributes определяют файлы, для поиска в дополнение к правильным файлам.
Если соответствие найдено, то возвращаемое значение - 0, иначе, оно отрицательное (и запись не заполняется).
FileMask может содержать путь, так же как имя файла. Имя файла может содержать символы - шаблоны:
?: Соответствие любого одного символа *: Соответствие 0, 1 или более символов
Attributes могут быть установлены следующим образом:
faAnyFile: Любой файл
faReadOnly: Файлы nолько для чтения
faHidden: Скрытые файлы
faSysFile: Системные файлы
faVolumeID: файлы идентификатора объема
faDirectory: Файлы каталоги
faArchive: Архивные файлы
Вы можете установить один или более из вышеупомянутых атрибутов, связывая их.
Запись SearchResult включает много полей. Некоторые используются последующими запросами к FindNext. Другие доступны вашей программе:
Name: Из длинного названия найденного файла
Size: Размер файла в байтах
Time: Дата/время последнего изменения файла
Attr: атрибуты файла (как выше)

Пример кода

Пример кода : Ищем все подходящие под Unit1.d* файлы в текущем каталоге

var
searchResult : TSearchRec;
begin
// Пытаемся найти правильные файлы, соответствующие Unit1.d* в текущем каталоге
if FindFirst('Unit1.d*', faAnyFile, searchResult) = 0 then
begin
repeat
ShowMessage(Имя файла = '+searchResult.Name);
ShowMessage('Размер файла = '+IntToStr(searchResult.Size));
until FindNext(searchResult) <> 0;
// Должен освободить ресурсы, используемые этими успешными, поисками
FindClose(searchResult);
end;
end;

Имя файла = Unit1.dcu
Размер файла = 4382
Имя файла = Uni1.dfm
Размер файла = 524
Имя файла = Uni1.ddp
Размер файла = 51

Пример кода : Ищем все каталоги выше, включая текущий

var
searchResult : TSearchRec;

begin
// Пробуем найти каталоги выше текущего каталога
SetCurrentDir('..');
if FindFirst('*', faDirectory, searchResult) = 0 then
begin
repeat
// Показываем только каталоги
if (searchResult.attr and faDirectory) = faDirectory
then ShowMessage('Directory = '+searchResult.Name);
until FindNext(searchResult) <> 0;
// Должен освободить ресурсы, используемые этими успешными, поисками
FindClose(searchResult);
end;
end;

Directory = .
Directory = ..
Directory = Bin
Directory = Help
Directory = Projects
Directory = Demos
Directory = Lib
Directory = Objrepos
Directory = MergeModules
Directory = Imports
Directory = Source
Directory = Rave5
Directory = Ocx

Примечание

Предупреждение: Вы должны вызвать FindClose после успешного FindFirst, когда Вы закончили искать. Это освобождает ресурсы, взятые процессом поиска.
Если FileMask не содержит никакой информации пути, то поиск будет проводится в текущем каталоге.
Поскольку параметр Attributes определяет дополнительные типа файлов для поиска, Вы должны фильтровать результаты Attr значение, чтобы выбрать только желательные типы файлов.