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