Операции ввода/вывода
Теперь рассмотрим две самые распространенные операции, выполняемые при работе с файлами. Это чтение и запись. Для их осуществления применяются специальные функции файлового ввода/вывода.
Итак, для выполнения операции чтения или записи необходимо произвести следующие действия:
- Объявить файловую переменную необходимого типа.
- При помощи функции AssignFile связать эту переменную с требуемым файлом.
- Открыть файл при помощи функций Append, Reset, Rewrite.
- Выполнить операции чтения или записи. При этом, в зависимости от сложности задачи и структуры данных, может использоваться целый ряд вспомогательных функций.
- Закрыть файл при помощи функции CloseFile.
Внимание
По сравнению с Turbo Pascal изменились названия только двух функций: Assign стала AssignFile, a Close превратилась в CloseFile.
В качестве примера рассмотрим небольшой фрагмент исходного кода.
… var F: TextFile; S: string; begin if OpenDlg.Execute then AssignFiie(F, OpenDlg.FileName) else Exit; Reset(F); while Not EOF(F) do begin Readln(F, S); Memo.Lines.Add(S); end; CloseFile(F); end; …
Если в диалоге открытия файла OpenDlg был выбран файл, то его имя связывается с файловой переменной F при помощи процедуры AssignFiie. В качестве имени файла рекомендуется всегда передавать полное имя файла (включая его маршрут). Как раз в таком виде возвращают результат выбора файла диалоги работы с файлами TOpenDialog, TOpenPictureDiaiog. Затем при помощи процедуры Reset этот файл открывается для чтения и записи.
В цикле выполняется чтение из файла текстовых строк и запись их в компонент TMemo. Процедура Readln осуществляет чтение текущей строки файла и переходит на следующую строку. Цикл выполняется, пока функция EOF не сообщит о достижении конца файла.
После завершения чтения файл закрывается.
Такой же исходный код можно использовать и для записи данных в файл. Необходимо только заменить процедуру чтения на процедуру записи.
Теперь остановимся подробнее на назначении используемых для файлового ввода/вывода функций.
Открытие файла может осуществляться тремя процедурами – в зависимости от типа его дальнейшего использования.
Процедура:
procedure Reset(var F: File [; RecSize: Word ]);
Открывает существующий файл для чтения и записи, текущая позиция устанавливается на первой строке файла.
Процедура:
procedure Append(var F: Text);
Открывает файл для записи информации после его последней строки, текущая позиция устанавливается на конец файла.
Процедура:
procedure Rewrite(var F: File [; RecSize: Word ]);
Создает новый файл и открывает его, текущая позиция устанавливается в начало файла. Если файл с таким именем уже существует, то он перезаписывается.
Переменная RecSize используется только при работе с нетипизированными файлами и определяет размер одной записи для операции передачи данных. Если этот параметр опущен, то по умолчанию RecSize равно 128 байт.