Программирование на языке 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.

Мы не можем считать больше байт, чем размер файла, иначе будет вызвана исключительная ситуация и программа может аварийно завершиться. Поэтому следует контролировать чтение файла.