Delphi для профессионалов

         

Атрибуты файла. Поиск файла


Еще одна часто выполняемая с файлом операция — поиск файлов в заданном каталоге. Для организации поиска и отбора файлов используются специальные процедуры, а также структура, в которой сохраняются результаты поиска.

Запись

type

TFileName = string;

TSearchRec = record

Time: Integer; {Время и дата создания}

Size: Integer; {Размер файла}

Attr: Integer; {Параметры файла}

Name: TFileName; {Полное имя файла}

ExcludeAttr: Integer; (He используется}

FindHandle: THandle; {Дескриптор файла}

FindData: TWin32FindData; {He используется}

 end;

обеспечивает хранение характеристик файла после удачного поиска. Дата и время создания файла хранятся в формате MS-DOS, поэтому для получения этих параметров в принятом в Delphi формате TDateTime необходимо использовать следующую функцию:

function FileDateToDateTime(FileDate: Integer): TDateTime;

Обратное преобразование выполняет функция

function DateTimeToFileDate(DateTime: TDateTime): Integer;

Свойство Attr может содержать комбинацию следующих флагов-значений:

  •  faReadOnly — только для чтения;
  •  faDirectory — каталог;
  •  faHidden — скрытый; 
  •  faArchive — архивный;
  •  faSysFile — системный; 
  •  faAnyFile — любой.
  •  favoiumeio — метка тома;

Для определения параметров файла используется оператор AND:

if (SearchRec.Attr AND faReadOnly) > 0

then ShowMessage('Файл только для чтения');

Непосредственно для поиска файлов используются функции FindFirst и FindNext.

Функция

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;

находит первый файл, заданный полным маршрутом Path и параметрами Attr (см. выше). Если заданный файл найден, функция возвращает 0, иначе — код ошибки Windows. Параметры найденного файла возвращаются в записи F типа TSearchRec.

Функция

function FindNext(var F: TSearchRec): Integer;

применяется для повторного поиска следующего файла, удовлетворяющего критерию поиска. При этом используются те параметры поиска, которые заданы последним вызовом функции FindFirst. В случае удачного поиска возвращается 0.

Для освобождения ресурсов, выделенных для выполнения поиска, применяется функция:

procedure FindClose(var F: TSearchRec);

В качестве примера организации поиска файлов рассмотрим фрагмент исходного кода, в котором маршрут поиска файлов задается в однострочном текстовом редакторе DirEdit, а список найденных файлов передается в компонент TListBox.

procedure TForml.FindBtnClick(Sender: TObject); 

begin

ListBox.Items.Clear;

FindFirst(DirEdit.Text, faArchive + faHidden, SearchRec);

while FindNext(SearchRec) = 0 do

ListBox.Iterns.Add(SearchRec.Name);

FindClose(SearchRec);

 end;

 

Содержание раздела