M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

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

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

    Запись

    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;