866 Глава 14

Имя константы	Значение	Атрибут
faReadOnly	$00000001	файл только для чтенш;
faHidden	$00000002	невидимый файл
faSysFile	$00000004	системный файл
faVolumeID	$00000008	идентификатор диска
faDirectory	$00000010	каталог
faArchive	$00000020	архивный файл
faAnyFile	$0000003F	любой файл

Начинается поиск вызовом функции FindFirst. В нее в качестве аргумента Path
передается шаблон поиска, а в качестве аргумента Attr — слово атрибутов, которы-
ми должны характеризоваться искомые файлы. Это слово формируется из указан-
ных выше констант атрибутов операцией поразрядного ИЛИ. Если соответствую-
щий файл нашелся, функция возвращает 0, а в указанную ее параметром F структу-
ру типа TSearchRec заносится информация о файле. Если после этого вызвать
функцию FindNext с той же структурой F в качестве параметра, то будет продолжен
поиск следующего файла, удовлетворяющего заданным условиям. После того, как
поиск всех файлов закончен или после того, как решено поиск прервать, вызывается
функция FindClose, которая освобождает выделенную под организацию поиска па-
мять.

Например, следующие операторы осуществляют поиск всех файлов и подката-
логов текущего каталога и выводят результаты в окно редактирования Memol:

TSearchRec sr;

Memol->Clear() ;

if (FindFirst("*.*", faAnyFile I faDirectory, sr) == 0)
(

Memol->Lines->Add(sr.Name+", размер: "+IntToStr(sr.Size));

while (FindNext(sr) == 0)
Memol->Lines->Add(sr.Name+", размер: "+IntToStr(sr.Size));

}
FindClose(sr) ;

Приведем более сложный пример. Следующий обработчик щелчка на кнопке
Button 1 обеспечивает в текущем каталоге и во всех его подкаталогах поиск и уда-
ление файлов с расширением .tds:

void _fastcall TFormI::ButtonlClick(TObject *Sender)
{
AnsiString CurDir = GetCurrentDir() ;

TSearchRec sr;

if (FindFirst("*.*", faAnyFile I faDirectory, sr) == 0)
{

if(CompareText(ExtractFileExt(sr.Name),".tds") == 0)
DeleteFile(sr.Name) ;

else if((sr.Attr == faDirectory)&&(sr.Name !=".")&&(sr.Name !=".."))
{
SetCurrentDir(ExtractFileDir(sr.Name));

ButtonlClick(Sender) ;

SetCurrentDir(CurDir) ;

)

while (FindNext(sr) == 0)
(

if(CompareText(ExtractFileExt(sr.Name),".tds") == 0)
DeleteFile(sr.Name) ;

else if((sr.Attr == faDirectory)&&(sr.Name !=".")&&(sr.Name !=".."))