Атрибуты файла. Поиск файла.
Еще одна часто выполняемая с файлом операция – поиск файлов в заданном каталоге. Для организации поиска и отбора файлов используются специальные процедуры, а также структура, в которой сохраняются результаты поиска.
Запись:
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;