Sources
Delphi Russian Knowledge Base
DRKB - база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Поиск файлов

01.01.2007

Теперь поговорим о поиске файлов. Для этой цели могут использоваться процедуры FindFirst, FindNext, FindClose, при участии переменной типа TSearchRec которая хранит информацию о текущем статусе поиска и характеристики последнего найденного файла.

Пример иллюстрирующий поиск всех файлов и каталогов в определенном каталоге:

Var SearchRec:TSearchRec;
...
If FindFirst('c:\Windows*.*', faAnyFile, SearchRec)=0 then
repeat
{Вот здесь мы можем делать с найденным файлом что угодно
SearchRec.name - имя файла
ExpandFileName(SearchRec.name) - имя файла с полным путем} 
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);

Примечания по приведенному коду:

  1. Первыми в список могут попадать файлы с именами "." и ".." - это ДОСовские имена для переходов на "родительский уровень", иногда нужна обработка для их игнорирования.

  2. FindFirst в качестве первого параметра принимает шаблон для поиска, так как он был принят для ДОС. Если шаблон не включает путь то файлы будут искаться в текущем каталоге.

  3. FindFirst требует задания атрибута для файла - здесь мы искали все файлы, если надо какие-то определенные (например только скрытые, или только каталоги) то надо это указать, список всех атрибутов я уже приводил выше.

  4. SearchRec переменная связывает воедино FindFirst и FindNext, но требует ресурсов для своей работы, поэтому желательно ее освободить после поиска процедурой FindClose(SearchRec) - на самом деле утечки памяти небольшие, но если программа работает в цикле и долгое время пожирание ресурсов будет значительным.

  5. FindFirst/FindNext - работают не открывая файлы, поэтому они корректно находят даже Swap файлы Windows...

Поиск файлов по дереву каталогов с заходом в подкаталоги разобран здесь

Previous page:
Файловые операции
Top:
DRKB
Next page:
Файловые потоки