Организация работы с файлами

Для работы с файлом в программе необходимо описать файловую переменную соответствующего типа, например:

var F:text – для текстового файла;

F:file of тип_компонентов – для типизированного файла.

Файловую переменную связывают с конкретным файлом на диске, указывая его имя.

Затем файл открывают, записываютв файл и/или читают из файла данные. Текущую позицию в файле при чтении и записи определяет файловый указатель, который при открытии файла указывает на начало файла, а в результате чтения и записи устанавливается после прочитанного или записанного компонента файла.

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

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

Все действия с файлами реализуются стандартными процедурами и функциями, в которых файловая переменная является первым параметром.

Замечание. Файловая переменная передается только по ссылке.

Подпрограммы для работы с файлами любых типов

Связывание файловой переменной с файлом

procedureAssign(F, name)

где name ‑ строковое выражение (в частности, переменная или константа), задающее имя файла.

Если файл находится в текущем каталоге, указывается только имя файла, например, Assign(F,’data.txt’).

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

Нельзя с одной файловой переменной связывать несколько файлов. Закрыв файл процедурой Close, файловую переменную можно связать с другим файлом.

Если из файла предполагается только читать, с ним можно связать несколько файловых переменных, каждая из которых будет «отвечать» за свой режим чтения. При записи использовать для одного файла несколько файловых переменных нельзя.

Открытие нового файла

procedureRewrite(F)

Создает и открывает новый (пустой) файл, файловый указатель устанавливается в его начало. Если файл, связанный с файловой переменной, существует, он предварительно уничтожается.

Если файл текстовый, в него можно только записывать. Для типизированного файла можно и писать, и читать.

Открытие существующего файла

procedure Reset(F)

Файловый указатель устанавливается в начало файла. Если файл, связанный с файловой переменной, не существует, возникает ошибка.

Если файл текстовый, из него можно только читать. Для типизированного файла можно и писать, и читать.

Повторный вызов ReSet переустанавливает файловый указатель в начало файла.

Проверки конца файла

function Eof(F): boolean

Функция (означает End of file) возвращает true, если файловый указатель находится за последним компонентом файла (т.е. на конце файла).

Чтение из файла

procedureRead(F,список переменных)

Данные из файла читаются в указанные переменные. После чтения файловый указатель устанавливается после прочитанных данных.

– Из текстовых файлов можно вводить целые и вещественные числа, символы и строки (числа перед занесением в переменную преобразуются из символьного представления в двоичный код чисел). Если перед вводом файловый указатель уже стоит на конце файла и ввод происходит в строковую переменную, она останется пустой и ошибки не будет. Для переменных других типов произойдет ошибка ввода.

– Для типизированных файлов тип переменных должен совпадать с типом компонентов файла, который может быть структурированным (например, массивом, записью). Ввод за концом файла приведет к ошибке.

Запись в файл

procedureWrite(F, список выражений)

Данные записываются в файл. После записи файловый указатель устанавливается после записанных данных.

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

– Для типизированных файлов тип выражений должен совпадать с типом компонентов файла.

Закрытие файла

procedureClose(F)

Завершается работа с файлом. Если в файл велась запись, неполный буфер записывается в файл. Однако связь файловой переменной с файлом сохраняется, и файл можно заново открыть без повторного вызова Assign.

После закрытия файла файловую переменную можно связать с другим файлом с помощью Assign.