Программирование на языке Delphi/§7
Под файлом понимается именованная область внешней памяти компьютера. Любой файл имеет три характерные особенности: Файл имеет имя, что дает возможность программе работать одновременно с несколькими файлами; Файл содержит компоненты одного типа; Длина создаваемого файла не оговаривается при его объявлении и ограничивается только размером устройств внешней памяти. Файл задается с помощью зарезервированного слова file. Затем можно указать тип файла
var
f1:file of char;
f2:TextFile;
f3:file;
Можно выделить три вида фалов:
- Типизированные файлы(задаются с помощью file of..)
- Текстовый файл(определяются типом TextFile)
- Не типизированные файлы(определяются типом File)
Доступ к файлам
Работа с файлами становится доступна программе после выполнения процедуры открытия файла. Эта процедура связывает файловую переменную с именем существующего или создаваемого файла, а также указание доступа к нему: чтение, запись или и чтение и запись.
Файловая переменная связывается с именем файла с помощью процедуры AssignFile:
var f:file;
begin
...
assignFile(f,'newfile.txt');
...
end.
Первый параметр - файловая переменная, второй - название файла.
Затем требуется инициализировать файл. Для этого существует три процедуры:
- Reset - эта процедура открывает уже созданный файл. Для нетипизированных файлов необходимо указывать длину записи.
- Rewrite - эта процедура создает новый файл. Если файл уже существует, то он перезаписывается. Для нетипизированных файлов необходимо указывать длину записи.
- Append - эта процедура для текстовых файлов, она открывает текстовый файл и устанавливает указатель файла в конец.
После завершения работы с файлом его необходимо закрыть с помощью процедуры closefile.
var f1:file;
begin
assignFile(f1,'newfile');
rewrite(f1,1); //F1 нетипизированный файл, мы должны указать длину записи(обычно единица)
closefile(f1);
end.
Подпрограммы для работы с файлами
Функция | Описание |
---|---|
Function EOF(var F):boolean | Возвращает True если файловый указатель стоит в конце файла. |
Procedure Erase(var f) | Уничтожает файл F. Перед уничтожением необходимо закрыть файл с помощью процедуры CloseFile. |
FileExists(const filename:string):boolean | Возвращает True если файл с именем filename существует. |
procedure Flush(var f) | Сохраняет изменения файла. |
procedure Rename(var f;NewName:string) | Переименовывает файл F, FileName - новое имя. Перед выполнением процедуры необходимо закрыть файл с помощью процедуры CloseFile. |
function FileSize(var f):integer; | Возвращает размер файла в байтах, если файл нетипизированный, или в количестве записей, если файл типизированный. |
Запись и чтение типизированных файлов
Для чтения и записи типизированных файлов используются функции read и write. Для того, чтобы с помощью этих функциий работать с файлами, необходимо указать в качестве параметра файловую переменную:
var f:textfile;
s:string;
begin
readln(s); //Ввод с клавиатуры в переменную s
writeln(s); //Вывод на экран из переменной s
assignFile(f,'text.txt');
rewrite(f);
writeln(f,s);//Это запись в файл
closefile(f);
end.
Функции writeln и readln следует использовать только для текстовых файлов. Для остальных нужно использовать read и write.
Запись и чтение нетипизированных файлов
Для чтения и записи нетипизированных файлов используется функция blockread и blockwrite. В качестве параметров нужно указать файловую переменную, буфер, и длину записи/чтения(она не должна превышать размеры буфера). В качестве буфера можно использовать массив,запись или переменную.
var f:file;
a:array[1..10]of char;
begin
assignfile(f,'file.bin');
reset(f,1);
blockread(f,a,sizeof(a)); //Функция sizeof возвращает размер параметра, в нащем случае 10 байт
end.
Мы не можем считать больше байт, чем размер файла, иначе будет вызвана исключительная ситуация и программа может аварийно завершиться. Поэтому следует контролировать чтение файла.