Страница 8 из 39 Функции работы с файлами Эта часть библиотеки претерпела изменения в 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. Старые имена поддерживаются ддя совместимости, но могут вызвать проблемы при одновременном употреблении с именами методов. |