Порядок действия при работе с файлами:
1. Файл должен быть открыт. Это означает, что ОС разрешает внесение изменений в данный файл, а также следит за корректностью обращения к файлу других пользователей. Файл обычно открывается в определенном режиме: для чтения , для записи и т.д.. Для ускорения работы указывается также внутренняя структура файла.
2. Работа с файлами (считывание, запись, поиск и т.д.)
3. Закрытие файла. Он становится доступным для других пользователей без ограничений. Его закрытие гарантирует, что внесенные в него изменения не пропадут (промежуточные результаты из буферов ОС сохраняться в файле).
Типы файлов
В Delphi стандартный тип File, на основе которого можно создавать новые файловые типы.
var F:file- переменная F нетипизированная (структура файла не известна).
Чаще всего в программе используются файлы, состоящие из последовательности файловых записей.
var имя переменной: File of тип;
В качестве типа тип, для которого точно известен фиксированный размер в байтах.
type TMyFile=record
name:string[20];
number:integer;
end;
var F:File of TMyFile;
Открытие файла
Перед открытием файла нужно указать, где он находится. Для этого файловая переменная связывается с файловой переменной:
AssignFile(F,’test.dat’);
AssignFile(F,’c:\projects\test.dat’);
Процедуры открытия файлов позволяют:
• открывать файл в режиме чтения(Reset);
• открывать файл в режиме записи(Rewrite),
var F:File ;
_ _ _ _ _
Rewrite(F,1);
По этой процедуре (Riwrite) старое содержание файла уничтожается (файл создается заново).
Для записи файл в файл с известной структурой применяется процедура Write:
var F:File of TMyFile;
A,NS,MyData:TMyFile;
_ _ _ _ _ _
Write(F,NS,MyData);
Значения переменных будут последовательно записаны в конец файла.
Считывание из файла – процедурой Read:
var F:File of TMyFile;
A,NS,MyData:TMyFile;
_ _ _ _ _ _
Reset(F);
Read(F,MyData,A);
Начиная с текущей позиции (начала) файла будут считаны блоки данных и записаны в переменной MyData и A. Текущая позиция в файле F после чтения сдвинутся на два элемента.
Закрытие файла
CloseFile(F);
Для доступа к определенной позиции в файле можно использовать процедуру Seek(var F;N:Longint);
F-файловая переменная
N-номер записи в файле;
_ _ _ _
Reset(F); Файл открывается процедурой Reset, т.к.
Seek(F,3); Reset уничтожает всю информацию в файле
Write(F,FF);
Close File(F);
Модифицируется четвертая запись.
Для текстовых файлов (тип Text) с нефиксированной длиной строк используется процедура, явно осуществляющая ввод/вывод с новой строки: Readln, Writeln.
Для обнаружения конца файла используется функция Eof (если текущая позиция окажется в конце файла).
AssignFile(F,’c:\A.txt’);
Reset(F);
i:=ø;
while not Eof(F) do
begin
Readln(F,S);
Inc(i);
End;
closeFile(F); //пересчет строк в текстовом файле
Для обработки имен файлов служат подпрограммы из стандартного модуля FileCtrl:
function ChangeFile(const FileName, Extension:string):string;-изменяет расширение имени файла FileName на новое, заданное параметром Extension.
function ExtractFileDiv(const FileName:string):string; -выделяет имя каталога и риска в формате, пригодного для непосредственного использования в функциях CreateDiv, GetCurrenntDiv и т.д.
function ExtractFileExt(const FileName:string):string; –выделяет расширение имени файла.
function ExtractFileFileName( ) – выделяет имя файла, , отделяя его от пути поиска.
function ExtractSharPathName( ) – преобразует путь поиска в формат коротких имен (до 8 символов):
C:\Program Files\A.txt→c:\Progra~1\A.txt
function IncludeTrailingBackslash(const S:string):string; –добавление в конец строки символ \, если он там отсутствует.
function MatchesMask(const FileName, Mask:string):Booleon; –возвращает true, если файл FileName соответствует заданной маске имеем Mask, содержащей подстановочные символы.
Поиск файлов
Поиск осуществляется в три этапа:
1) Находится первый файл, удовлетворяющий заданной маске с помощью функции:
function FindFirst(const Path:string; Attr:integer;
var F:TSearchRec):integer;
Параметр Path содержит путь доступа для папки, в которой проводится поиск. Путь должен завершаться маской и имен файлов: *.*, *.см?. c:\tmp\*.htm
Атрибуты.
Результаты поиска сохраняются в переменной F, имеющей тип TSearchRec.
Type TSearchRec=record
Time:integer;
Size: integer;
Attr:integer;
Name:TFileName;
ExcludeAttr: integer;
FindHandle:THandle;
End;
Time – время создания файла в формате DOS.
Size – размер файла в байтах;
2) Вызывается функция, продолжающая поиск:
function FindNext(var F:TSearchRec):integer
Переменная F типа TSearchRec передается этой функции в качестве парамтра.
3) Завершение поиска:
procedure FindClose(var F: TSearchRec);
(освобождается память, выделенная для проведения процесса поиска).
При создании программ для Winows корректнее применять ее стандартные функции. В Windows каждый файл имеет уникальный цифровой индификатор, по английски называемый Handle. Для работы с файлами не требуется создавать файловые переменные. При это принципы работы с файлами, открытыми с помощью Reset и Rewrite, не должны смешиваться с помощью функции Windows.
function File Create(const FileName:string):integer; – создет файл с путем (FileName); – 1 – если создать файл не удалось.
Function FileOpen(const FileName:string; Mode:LongWord):integer;
– открывает файл в режиме Mode;
• fmOpenRead – только на чтение ;
• fmOpenWrite – только на запись ;
• fmReadWrite – режим изменения ;
Чтение и запись данных осуществляется блоками заданного размера:
function F;leread(Handle:integer; var Buffer,Count:integer):integer;
Count – число считываемых байтовж
Buffer – переменная для записи этих байтов(как правило массив из элементов типа Char или Byte);
Аналогична функция function FileClose(Handle:integer);
Запись в файл текстовой строки:
var FileHandle:integer;
S:integer;
Begin
S:=’текстовая строка’;
FileHandle:=FileCreate(‘c:\tmp\S.txt’);
FileWrite(FileHandle, S, Size of(S));
FileClose(FileHandle);
End;
Size of(S) – для определения размера строки
Для поиска в Windows можно использовать функцию
function File Search(const Name, DirList:string):string;
Name – имя искомого файла;
DirList – список папок для поиска(через;) функция возвращает имя файла с полным путём поиска или пустую строку.
S:=FileSearch(‘MyDoc.doc’, ‘c:\Мои документы; D:\Info\Text’);
If S<>’ ’ then ShowMessage(S);
Текущая позиция в файле устанавливается с помощью функции функции
function FileSeek(Handle,Offset,Origin:integer):integer;
Offset задает сдвиг в байтах относительно позиции, определяемой параметром Origin:
0 – от начала файла;
1 – от текущей позиции;
2 – от конца файла.
1. Файл должен быть открыт. Это означает, что ОС разрешает внесение изменений в данный файл, а также следит за корректностью обращения к файлу других пользователей. Файл обычно открывается в определенном режиме: для чтения , для записи и т.д.. Для ускорения работы указывается также внутренняя структура файла.
2. Работа с файлами (считывание, запись, поиск и т.д.)
3. Закрытие файла. Он становится доступным для других пользователей без ограничений. Его закрытие гарантирует, что внесенные в него изменения не пропадут (промежуточные результаты из буферов ОС сохраняться в файле).
Типы файлов
В Delphi стандартный тип File, на основе которого можно создавать новые файловые типы.
var F:file- переменная F нетипизированная (структура файла не известна).
Чаще всего в программе используются файлы, состоящие из последовательности файловых записей.
var имя переменной: File of тип;
В качестве типа тип, для которого точно известен фиксированный размер в байтах.
type TMyFile=record
name:string[20];
number:integer;
end;
var F:File of TMyFile;
Открытие файла
Перед открытием файла нужно указать, где он находится. Для этого файловая переменная связывается с файловой переменной:
AssignFile(F,’test.dat’);
AssignFile(F,’c:\projects\test.dat’);
Процедуры открытия файлов позволяют:
• открывать файл в режиме чтения(Reset);
• открывать файл в режиме записи(Rewrite),
var F:File ;
_ _ _ _ _
Rewrite(F,1);
По этой процедуре (Riwrite) старое содержание файла уничтожается (файл создается заново).
Для записи файл в файл с известной структурой применяется процедура Write:
var F:File of TMyFile;
A,NS,MyData:TMyFile;
_ _ _ _ _ _
Write(F,NS,MyData);
Значения переменных будут последовательно записаны в конец файла.
Считывание из файла – процедурой Read:
var F:File of TMyFile;
A,NS,MyData:TMyFile;
_ _ _ _ _ _
Reset(F);
Read(F,MyData,A);
Начиная с текущей позиции (начала) файла будут считаны блоки данных и записаны в переменной MyData и A. Текущая позиция в файле F после чтения сдвинутся на два элемента.
Закрытие файла
CloseFile(F);
Для доступа к определенной позиции в файле можно использовать процедуру Seek(var F;N:Longint);
F-файловая переменная
N-номер записи в файле;
_ _ _ _
Reset(F); Файл открывается процедурой Reset, т.к.
Seek(F,3); Reset уничтожает всю информацию в файле
Write(F,FF);
Close File(F);
Модифицируется четвертая запись.
Для текстовых файлов (тип Text) с нефиксированной длиной строк используется процедура, явно осуществляющая ввод/вывод с новой строки: Readln, Writeln.
Для обнаружения конца файла используется функция Eof (если текущая позиция окажется в конце файла).
AssignFile(F,’c:\A.txt’);
Reset(F);
i:=ø;
while not Eof(F) do
begin
Readln(F,S);
Inc(i);
End;
closeFile(F); //пересчет строк в текстовом файле
Для обработки имен файлов служат подпрограммы из стандартного модуля FileCtrl:
function ChangeFile(const FileName, Extension:string):string;-изменяет расширение имени файла FileName на новое, заданное параметром Extension.
function ExtractFileDiv(const FileName:string):string; -выделяет имя каталога и риска в формате, пригодного для непосредственного использования в функциях CreateDiv, GetCurrenntDiv и т.д.
function ExtractFileExt(const FileName:string):string; –выделяет расширение имени файла.
function ExtractFileFileName( ) – выделяет имя файла, , отделяя его от пути поиска.
function ExtractSharPathName( ) – преобразует путь поиска в формат коротких имен (до 8 символов):
C:\Program Files\A.txt→c:\Progra~1\A.txt
function IncludeTrailingBackslash(const S:string):string; –добавление в конец строки символ \, если он там отсутствует.
function MatchesMask(const FileName, Mask:string):Booleon; –возвращает true, если файл FileName соответствует заданной маске имеем Mask, содержащей подстановочные символы.
Поиск файлов
Поиск осуществляется в три этапа:
1) Находится первый файл, удовлетворяющий заданной маске с помощью функции:
function FindFirst(const Path:string; Attr:integer;
var F:TSearchRec):integer;
Параметр Path содержит путь доступа для папки, в которой проводится поиск. Путь должен завершаться маской и имен файлов: *.*, *.см?. c:\tmp\*.htm
Атрибуты.
Результаты поиска сохраняются в переменной F, имеющей тип TSearchRec.
Type TSearchRec=record
Time:integer;
Size: integer;
Attr:integer;
Name:TFileName;
ExcludeAttr: integer;
FindHandle:THandle;
End;
Time – время создания файла в формате DOS.
Size – размер файла в байтах;
2) Вызывается функция, продолжающая поиск:
function FindNext(var F:TSearchRec):integer
Переменная F типа TSearchRec передается этой функции в качестве парамтра.
3) Завершение поиска:
procedure FindClose(var F: TSearchRec);
(освобождается память, выделенная для проведения процесса поиска).
При создании программ для Winows корректнее применять ее стандартные функции. В Windows каждый файл имеет уникальный цифровой индификатор, по английски называемый Handle. Для работы с файлами не требуется создавать файловые переменные. При это принципы работы с файлами, открытыми с помощью Reset и Rewrite, не должны смешиваться с помощью функции Windows.
function File Create(const FileName:string):integer; – создет файл с путем (FileName); – 1 – если создать файл не удалось.
Function FileOpen(const FileName:string; Mode:LongWord):integer;
– открывает файл в режиме Mode;
• fmOpenRead – только на чтение ;
• fmOpenWrite – только на запись ;
• fmReadWrite – режим изменения ;
Чтение и запись данных осуществляется блоками заданного размера:
function F;leread(Handle:integer; var Buffer,Count:integer):integer;
Count – число считываемых байтовж
Buffer – переменная для записи этих байтов(как правило массив из элементов типа Char или Byte);
Аналогична функция function FileClose(Handle:integer);
Запись в файл текстовой строки:
var FileHandle:integer;
S:integer;
Begin
S:=’текстовая строка’;
FileHandle:=FileCreate(‘c:\tmp\S.txt’);
FileWrite(FileHandle, S, Size of(S));
FileClose(FileHandle);
End;
Size of(S) – для определения размера строки
Для поиска в Windows можно использовать функцию
function File Search(const Name, DirList:string):string;
Name – имя искомого файла;
DirList – список папок для поиска(через;) функция возвращает имя файла с полным путём поиска или пустую строку.
S:=FileSearch(‘MyDoc.doc’, ‘c:\Мои документы; D:\Info\Text’);
If S<>’ ’ then ShowMessage(S);
Текущая позиция в файле устанавливается с помощью функции функции
function FileSeek(Handle,Offset,Origin:integer):integer;
Offset задает сдвиг в байтах относительно позиции, определяемой параметром Origin:
0 – от начала файла;
1 – от текущей позиции;
2 – от конца файла.