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