Иллюстрированный самоучитель по Delphi 7 для профессионалов

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

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

Запись:

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;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.