Справочник по компонентам Delphi. Часть 1 - Функции работы с файлами
ОГЛАВЛЕНИЕ
Функции работы с файлами
Эта часть библиотеки претерпела изменения в Delphi. К функциям, которые работали с файлом через файловую переменную, добавились функции, работающие с дескриптором файла. Они рассматривают файл как двоичный; с текстовыми файлами нужно работать "по старинке".
Файловые функции, описанные в модуле SYSUTILS, приведены в таблице:
function File0pen(const FileName: string; Mode: Word) : Integer; | Открывает существующий FileName файл в режиме Mode (см. примеч. 1). Значение, возвращаемое в случае успеха, — дескриптор открытого файла. В противном случае — код ошибки DOS. |
function FileCreate(const PileName: string): Integer; | Создает файл с именем FileName. Возвращает то же, что и FileOpen. |
function FileRead(Handle: Integer; var Buffer; Count: Longint): Longint; | Считывает из файла с дескриптором Handle Count байт в буфер Buffer. Возвращает число реально прочитанных байт или -1 при ошибке. |
function FileWrite(Handle: Integer; const Buffer; | Записывает в файл с дескриптором Handle Count байт из буфера Buffer. Возвращает число реально записанных байт или -1 при ошибке. |
function FileSeek(Handle: Integer; Offset: Longint; Origin: Integer): Longint; | Позиционирует файл с дескриптором Handle в новое положение. При Origin = 1,2,3 положение смещается на Offset байт от начала файла, текущей позиции и конца файла соответственно. Возвращает новое положение или -1 при ошибке. |
procedure FileClose(Handle: | Закрывает файл с дескриптором Handle. |
function FileAge(const | Возвращает значения даты и времени создания файла или -1, если файл не существует. |
function FileExists(const | Возвращает True если файл FileName существует к найден. |
function FindFirst(const Path: string; Attr: Integer; var SearchRec: TSearchRec): Integer; | Ищет первый файл, удовлетворяющий маске поиска, заданной в Path и с атрибутами Attr (см. примеч. 2). В случае успеха заполняет запись SearchRec (см. примеч. 3) и возвращает 0, иначе возвращает код ошибки DOS. |
function FindNext(var SearchRec: TSearchRec): Integer; | Продолжает процесс поиска файлов, удовлетворяющих маске поиска. Параметр SearchRec должен быть заполнен при помощи FindFirst. Возвращает 0, если очередной файл найден, или код ошибки DOS. Изменяет SearchRec. |
procedure FindClose(var | Завершает процесс поиска файлов, удовлетворяющих маске поиска. |
function FileQetDate(Handle: Integer) : Longint; | Возвращает время создания файла с дескриптором Handle (в формате DOS) или -1, если дескриптор недействителен. |
procedure FileSetDate(Handle: Integer; | Устанавливает время создания файла с дескриптором Handle (в формате DOS). |
function FileGetAttr(const FileName: string): Integer; | Возвращает атрибуты (см. примеч. 2) файла с именем FileName или код ошибки DOS, если файл не найден. |
function FileSetAttrtconst FileName: string; Attr: | Устанавливает атрибуты файла с именем FileName. |
function DeleteFile(const | Уничтожает файл с именем FileName и в случае успеха возвращает True. |
function RenameFile(const OldName, NewName: string): Boolean; | Переименовывает файл с именем OldName в NewName и возвращает True в случае успеха. |
function ChangeFileExt(const FileName, Extension: string): string; | Изменяет расширение в имени файла FileName на Extension и возвращает новое значение FileName. Имя файла не изменяется. |
function ExtractFilePath(const FileName: string): string; | Извлекает из строки с полным именем файла FileName часть, содержащую путь к нему. |
function ExtractFileName(const FileName: string): string; | Извлекает из строки с полным именем файла FileName часть, содержащую его имя и расширение. |
function ExtractFileExt(const FileName: string): string; | Извлекает из строки с полным именем файла FileName часть, содержащую его расширение. |
function ExpandFileName(const FileName: string): string; | Возвращает полное имя файла FileName, добавляя при необходимости путь к нему и переводя все символы в верхний регистр. |
function FileSearch(const Name, DirList: string): strings- | Производит поиск файла с именем Name в группе каталогов, заданных параметром DirList. Имена каталогов должны отделяться друг от друга точкой с запятой. Возвращает в случае успеха полное имя файла или пустую строку, если файл не найден. |
function DiskFree(Drive: Byte): Longint; | Возвращает количество в байтах свободного места на заданном диске. Значение параметра Drive: 0 — для текущего диска, 1 — для А, 2 — для В и т. д. Если параметр неверен, функция возвращает -1. |
function DiskSize(Drive: Byte): Longint; | Возвращает размер диска Drive в байтах. Параметр Drive означает то же, что и в DiskFree. |
function FileDateToDateTime(FileDate: Longint): TDateTime; | Преобразует дату и время в формате DOS в принятый в Delphi формат TDateTime. |
function DateTimeToFileDate(DateTime: TDateTime): Longint; | Преобразует дату и время из формата TDateTime в формат DOS. |
1. Допустимы следующие режимы открытия файлов:
Режим | Значение | Что означает |
fmOpenRead | $0000 | Открыть только для чтения. |
fmOpenWrite | $0001 | Открыть только для записи. |
fmOpenReadWrite | $0002 | Открыть для чтения и записи. |
fmShareCompat | $0000 | Обеспечить совместимость со старой моделью доступа к файлам. |
fmShareExclusive | $0010 | Запретить другим доступ к файлу. |
fmShareDenyWrite | $0020 | Запретить другим запись в файл. |
fmShareDenyRead | $0030 | Запретить другим чтение файла. |
fmShareDenyNone | $0040 | Разрешить другим все виды доступа. |
2. Файлы могут иметь следующие атрибуты:
faReadOnly = $01;
faHidden = $02;
faSysFile = $04;
faVolumeID = $08;
faDirectory = $10;
faArchive = $20;
faAnyFile = $3F;
3. Формат структуры TSearchRec таков:
TSearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[12];
end;
Приведем типовой вариант организации групповой обработки файлов при помощи функций FindFirst, FindNext и FindClose. В нем в список добавляются имя и длина всех файлов в каталоге с именем CADELPHI:
var
SearchRec: TSearchRec;
I : Integer;
List : TStringList;
begin
List := TStringList.Create;
I := FindFirst('c:\delphi\*.*', faAnyFile, SearchRec);
while I = 0 do
begin
List.Add(Format (' File %s has length %d bytes ', [SearchRec.Name, SearchRec.Size]));
I := FindNext(SearchRec);
end;
FindClose(SearchRec);
List.Free;
end;
При поиске файла наиболее вероятным является код ошибки -18 (файл не найден).
Процедура FindClose не делает ничего в 16-разрядной версии Delphi, однако будет играть роль в 32-разрядной. Употреблять ее следует из соображений переносимости приложений.
4. Ряд "старых" функций переименованы: это связано с появлением одноименных методов у объектов. Теперь вместо Assign следует употреблять AssignFile, вместо Close — CloseFile. Старые имена поддерживаются ддя совместимости, но могут вызвать проблемы при одновременном употреблении с именами методов.