logo
Программирование в среде Delphy / Программирование в среде Delphi

15. Работа с файлами и каталогами

Для работы с файловой системой используются следующие функции и процедуры:

Function DiskSize(Drive: Byte): Int64; – получение размера диска в байтах. Параметр Drive определяет номер дисковода: 0 – текущий дисковод, 1 – A, 2 – B и т.д.;

Function DiskFree(Drive: Byte): Int64; – получение размера свободной области на диске;

Procedure ChDir(const S: string);overload; – смена текущей директории, например ChDir(’C:\My\’);

Procedure RmDir(const S: string);overload; – удаление пустой директории;

Procedure MkDir(const S: string); overload; – создание новой поддиректории;

Procedure GetDir(D: Byte; var S: string); – получение текущей директории на устройстве D;

Procedure Rename(var F; Newname: string); – переименование файла, связанного с файловой переменной F, в файл с именем Newname;

Procedure Erase(var F); – удаление закрытого файла, связанного с переменной F;

Function DirectoryExists(const Directory: string): Boolean; – проверка существования директории. Если она есть, то функция возвращает – True;

Function FileExists(const FileName: string): Boolean; – проверка наличия на диске файла с именем FileName;

Function FileGetAttr(const FileName: string): Integer; – получение атрибутов файла FileName;

Function FileAge(const FileName: string): Integer; – получение в сжатом виде даты создания файла для файла FileName;

Function FileDateToDateTime(FileDate: Integer): TDateTime; – перевод сжатой информации о дате создания файла в стандартный формат даты–времени. Для перевода его в строку следует использовать функцию DateToStr;

Function FileSearch(const Name, DirList: string): string; – поиск файла Name в списке каталогов DirList;

Function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer; – функция первого поиска файла в заданной директории и с заданным атрибутом, результат поиска помещается в запись F, она возвращает 0, если файл найден, иначе – код ошибки;

Function FindNext(var F: TSearchRec): Integer; – функция последующего поиска файла, удовлетворяющая условиям поиска в функции FindFirst, она возвращает 0, если файл найден;

Procedure FindClose(var F: TSearchRec); – освобождение памяти, выделенной ранее функцией FindFirst.

Рассмотрим пример применения этих трех функций. На форме должны быть помещены следующие компоненты:

Edit1 – для задания образа искомого файла, например, ’*.pas’ – для поиска всех файлов с расширением pas;

CheckBox1 – для задания атрибутов искомых файлов;

StringGrid1 – для вывода имен и длин найденных файлов;

Button1 – для запуска процесса поиска файлов.

Тогда обработчик события нажатия кнопки будет выглядеть следующим образом:

Procedure TForm1.Button1Click(Sender: TObject);

Var sr: TSearchRec; // Запись для параметров найденного файла

FileAttrs: Integer; // Переменная для задания атрибута искомых файлов

begin

StringGrid1.RowCount := 1; // Задаем одну строку для вывода имен файлов

if CheckBox1.Checked then // Определяем атрибут только для чтения файла

FileAttrs := faReadOnly

Else FileAttrs := 0;

if CheckBox2.Checked then

FileAttrs := FileAttrs + faHidden; // Определяем атрибут для скрытых файлов

if CheckBox3.Checked then

// Определяем атрибут для системных файлов

FileAttrs:=FileAttrs+faSysFile;

if CheckBox4.Checked then

FileAttrs := FileAttrs + faVolumeID;// Атрибут метки тома

if CheckBox5.Checked then

FileAttrs := FileAttrs + faDirectory; // Атрибут для каталога

if CheckBox6.Checked then

FileAttrs := FileAttrs + faArchive; // Атрибут для архивных файлов

if CheckBox7.Checked then

FileAttrs := FileAttrs + faAnyFile; // Атрибут для любых файлов

with StringGrid1 do

begin

RowCount := 0; ColCount:=2; // Ищем первый файл

if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then

begin

repeat // Открываем цикл поиска всех остальных файлов

if (sr.Attr and FileAttrs) = sr.Attr then

begin

// Увеличиваем счетчик найденных файлов на 1

RowCount := RowCount + 1;

Cells[0,RowCount-1] := sr.Name; // В первую колонку пишем имя файла

Cells[1,RowCount-1] := IntToStr(sr.Size); // Во вторую – размер файла

end;

until FindNext(sr) <> 0; // Ищем следующий файл

FindClose(sr); // Освобождаем память

end;

end;

end;