Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

1.8.4. ФайлыWindows

В функциях обработки файлов Windowsмогут использоваться атрибуты файлов и режимы доступа.

Атрибуты файлов задаются именованными константами:faRead­On­ly(только чтение),faHidden(скрытый),faSysFile(системный),faVolum­ID(имя диска),faDirectory(каталог),faArchive(архив),faAnyFile(любой).

Режимы доступапри открытии файла задаются константами:

fmOpenRead(только чтение),fmOpenWrite(запись),fmOpenReadWrite(чте­ние и запись),fmShareCompat(совместимый сFCB),fmShareExclusive(мо­но­поль­ное использование),fmShareDenyWrite(запрет записи для дру­гих приложений),fmShareDenyRead(запрет чтения для других при­ло­жений),fmShareDenyNone(многопользовательский разделяемый режим).

В системе Windowsкаждый файл вместо файловой переменной имеет уникальный цифровой дескриптор, называемый обычноHanle(он обозначен в описаниях процедур и функций буквойH), значение которого формируется функциями открытия файлаFileCreateилиFileOpen:

FileCreate(S)‑ создание файла под именемS, возвращение его дескриптора.

FileOpen(S;M:Integer)‑ открытие уже существующего файлаSв режимеM(комбинацияfmXXXXиfmShareXXXX, соединенных операциямиOr), и возвращение его дескриптора.

Запрещается одновременное использование для одного файла функции и процедур файлов Паскаля и Windows.

Приведем список других основных процедур и функций.

FileClose(H)‑ закрытие файла с дескрипторомH(см.FileCreat,FileOpen).

FileGetDate(H):Integer‑ возвращает в форматеDOSдату и время создания открытого файла с дескрипторомH.

FileRead(H;Var B;N:Integer):Integer‑ читаетNбайтов из открытого файлаcдескрипторомHв переменнуюBи возвращает числоcчитанных байтов.

Обычно переменной Bявляется одномерный массив элементов типа Сhar.

FileSeek(H,N,O:Integer):Integer‑ устанавливает в открытом файлеcдес­крип­торомHпозицию со смещениемNот начала (O=0) текущего положе­ния (O=1) или от конца (O=2) файла соответственно. Возвращает новую по­зицию или -1 в случае ошибки.

FileSetDate(H,A:Integer):Integer‑ устанавливает в форматеDOSдату и время создания (A) открытого файла с дескрипторомHи возвращает 0 при успешном выполнении, иначе - код ошибкиWindows. Дату можно получить из значения типаTDateTimeфункциейDateTimeToFileDate.

FileWrite(H;B;N:Integer):Integer‑ записываетNбайтов в открытый файлcдескрипторомHиз переменнойBи возвращает число выведенных байтов.

Пример:

Procedure TForm1.Button1Click(Sender: TObject); //обработка кнопки

Var H:Integer; S,Z: Array [1..5] of Char; //объявление переменных

Begin Try H:=FileCreate('c:\prim.dat'); //открытие создаваемого файла

S:='12345';FileWrite(H,S,SizeOf(S));{вывод S}FileClose(H);//закрытие файла

H:=FileOpen('c:\prim.dat',fmOpenRead); //открытие файла для чтения

FileSeek(H,‑4,2);//пропуск назад от конца файла 4 байта, текущая позиция 2

FileRead(H,Z,3);//вывести из файла три байта, начиная с текущего второго

Label1.Caption:=Copy(Z,1,3); //вывод Z в метку (будет текст: 234)

Finally FileClose(H); {закрытие файла в любом случае} End; End;

1.8.5. Обслуживание внешних файлов и каталогов

Эти программы хранятся в модулях SystemиSysUtils(большинство функции возвращаютTrueпри успешном выполнении).

ChDir(S)‑ устанавливает текущий каталогS.

ChangeFileExt(Const S1, S2): String ‑ изменяет расширение файла S1 на S2

CreateDir(S):Boolean‑ создает новый каталог с указанным путем.

DateTimeToFileDate(D:TDateTime):Integer‑ преобразуетDв форматDosдля даты и времени, используемый в процедурахFileAge,FileGetDate,FileSetDate,FindFirst,FindNext.

DeleteFile(Const S):Boolean ‑ удаляет файл S, возвращая True при успехе.

DirectoryExists(S):Boolean ‑ возвращает True, если есть каталог S.

DiskFree/DiskSize (D:byte):Integer‑ возвращает размер свободной/всей об­лас­ти дискаD(0 ‑ текущий диск, 1 ‑A, 2 ‑B, 3 ‑C,...). При ошибке возвращается -1.

ExpandFileName(S):String‑ возвращает полный путь и имя файлаS.

ExpandUNCFileName(S):String‑ возвращает в форматеUNCполный путь в сети и имя файлаS.

ExtractFileDir(S):String‑ возвращает путь к каталогу из полного имениS.

ExtractFileDrive(S):String‑ возвращает имя диска из полного имениS.

ExtractFileExt(S):String‑ возвращает расширение из имениS.

ExtractFileName(S):String‑ возвращает имя файла с расширением изS.

ExtractFilePath(S):String‑ возвращает путь к каталогу с именем диска из полного имени файла, указанного параметромS.

ExtractRelativePath(S1,S2):String‑ преобразует полный путь поискаS2 в строку относительного пути поискаS1. Пути могут содержать «..\».

ExtractShortPathName(S):String‑ преобразует путь поискаSв форматDos.

FileAge(S):Integer‑ возвращает время создания файлаS.

FileDateToDateTime(D:Integer):TDateTime‑ преобразует в значение типаTDateTimeформатDosдля дат и времени, используемый в процедурахFileAge,FileGetDate,FileSetDate,FindFirst,FindNext.

FileExists(S):Boolean‑ возвращаетTrue, если есть файл под именемS.

FileGetAttr(S):Integer‑ возвращает атрибуты файлаS. Наличие атрибутов можно проверить сложением операциейAndнадfaXXXX(п.1.8.4).

FileSearch(S1,S2):String‑ ищет файлS1 в списке каталоговS2 в форматеDOSдляPathчерез «;» и возвращает полный путь или пустую строку (нет).

FileSetAttr(S;A:Integer):Integer‑ задает атрибуты (комбинацияfaXXXX(п.1.8.4), соединенных операциямиOr.) и возвращает 0 при успешном выполнении, иначе - код ошибкиWindows.

FindClose(Var F:TSearchRec)прерывает поиск процедурамиFindXXXX.

FindFirst(S;A:Integer;Var F:TSearchRec):Integer‑ поиск первого файла, удов­летворяющего шаблонуS(например,C:\base\*.dbf). и возвращает 0 при успешном выполнении, иначе - код ошибкиWindows.

Описание найденного файла помещается в переменную FтипаTsearchRec:Time:Integer{дата и время создания файла в форматеDOS};SizeInteger{размер файла в байтах};Attr:Integer{атрибуты};Name:TFileName{имя файла};ExcludeAttr:Integer;FindHandle:THandle;FindData:TWin32FindData.

FindNext(Var F:TSearchRec):Integer‑ поиск следующего файла.

ForceDirectories(S):Boolean‑ создает каталог с подкаталогамиS.

GetCurrentDir:Stringвозвращает имя текущего каталога.

GetDir(D:byte;var S)‑ возвращает вSимя текущего каталога дискаD(0 ‑ текущий диск, 1 ‑A, 2 ‑B, 3 ‑C,...).

IncludeTrailingBackSlash(S):String‑ добавляет в конецS«\», если его нет.

IsPathDelimiter(S,I:Integer):Boolean‑ возвращаетTrue, если «\» в позицииI

MatchesMask(S1,S2):Booleanвозвращает. True, если файл с именемS1 соответствует маске файловS2 с подстановочными символами «*»,»?».

MkDir(S)‑ создание каталога с полным путем вS.

ProcessPath(S1;Var D:Char;Var S2;Var S3)из файлаS1 выделяется имя диска (D), путь поиска (S2), имя файла (S3).

RenameFile(S1,S2):Boolean ‑ переименование файла S1 в S2.

RmDir(S), RemoveDir(S):Boolean‑ удаляет пустой каталог с именем вS.

SetCurrentDir(S):Boolean устанавливает текущий каталогS.