ИНИЦИАЦИЯ ФАЙЛА

ДОСТУП К ФАЙЛАМ

 

Файлы, а также логические устройства становятся доступны программе только после выполнения особой процедуры открытия файла (логического устройства). Эта процедура заключается в связи заранее объявленной файловой переменной (для ее включения в работу программы) с именем существующего или вновь создаваемого файла (на физическом или логическом устройстве), а также в указании направления обмена информацией: чтение из файла или запись в него.

Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN (назначить):

Assign(<файловая переменная>, <имя файла или логического устройства>);

Здесь <ф. п.> - файловая перемененная (правильный идентификатор, объявлен­ный в программе как переменная файлового типа);

<имя файла или л.у.> - текстовое выражение, содержащее имя файла или логическое устройство.

Доступ к элементам файла осуществляется через указатель файла (буферная переменная). При чтении или записи этот указатель перемещается к следующему элементу и делает его доступным для обработки. В каждый момент доступен для записи (чтения) только тот файл, на который установлен указатель.

Так как, по определению, число элементов файла не задается, то в Турбо Паскале для нахождения конца файла введена стандартная функция

eof(var f : file) : boolean;

Когда достигли конца файла, eof принимает значение True, в противном случае - False.

 

 

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

Для чтения файл инициируется с помощью стандартной процедуры RESET;

reset (<ф. п.>);

Здесь <ф. п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством - приемником информации.

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

Если делается попытка инициировать чтение из несуществующего файла или из логического устройства PRN, возникает ошибка периода исполнения, которая может быть сообщена программе ненулевым значением встроенной функции IORESULT типа WORD. Например, следующий фрагмент программы позволяет установить, существует ли требуемый файл на диске:

var

f : file of integer;

........

assign(f, 'array.dat');

{$i-} {Отключить контроль ошибок ввода-вывода}

reset(f);

{$i+} {Включить контроль ошибок ввода-вывода}

if IORESULT <> 0 then ..... {Файл не существует}

else .... {Файл существует}

 

В этом фрагменте с помощью директивы компилятора {$i-} отключается автоматический контроль ошибок ввода-вывода. Если этого не сделать, то отсутствие файла приведет к аварийному завершению программы.

В Турбо Паскале разрешается обращаться к типизированным файлам, открытым процедурой Reset (т. е. для чтения информации) с помощью процедуры Write (т. е. для записи информации). Такая возможность позволяет легко обновлять ранее созданные типизированные файлы и при необходимости расширять их. Для текстовых файлов, открытых процедурой Reset, нельзя использовать процедуру Write или Writeln.

Стандартная процедура Rewrite (<ф. п.>) инициирует запись информации в файл или в логическое устройство, связанное ранее с файловой переменной <ф.п.>. Процедурой Rewrite нельзя инициировать запись информации в ранее существующий дисковый файл при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом в программу не передается. Новый файл подготавливается к приему информации и его указатель принимает значение 0.

Стандартная процедура APPEND (<ф.п.>) инициирует запись в ранее существующий текстовый файл для его расширения, при этом указатель файла устанавливается в его конец. Процедура APPEND применяется только к тестовым файлам, т.е. их файловая переменная должна иметь тип TEXT. Процедурой APPEND нельзя инициировать запись в типизированный или не типизированный файл. Если текстовый файл ранее уже был уже открыт с помощью RESET или REWRITE, использование процедуры APPEND приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.