12. Бинарные и текстовые файлы
В бинарном файле данные хранятся как неформатированная последовательность файлов. В таком файле нет записей и полей. Такие файлы характеризуются большой гибкостью, но эта гибкость требует от программиста гораздо большей работы по контролю над тем, что и где сохраняется в файле.
Как и файл с произвольным доступом все бинарные файлы соответствующие им указатели. Однако в бинарном файле указатель указывает байтовую позицию.
При первом открытии файла указатель находится в позиции 1. После любой операции чтения или записи указатель помещается сразу или после прочитанных или записанных данных. Значение файлового указателя можно определить или изменить с помощью оператора Seek и Loc. Можно использовать функцию Eof для определения достижения конца файла.
Для записи данных в бинарный файл используется оператор Put, для чтения оператор get.
Put # fn, pos, var
Get # fn, pos, var
Необязательный аргумент, описывающий позицию байта, который должен произвести запись или чтение.
Var-объявляем переменную.
Эти операторы автоматически читают и записывают количество байтов, содержащихся в переменной. Если Var – сторона переменной длины, то количество переданных байтов равно количеству символов.
Гибкость с бинарным файлом требует дополнительной работы для отслеживания и сохранения данных. Сдвиг файлового указателя на 1 байт может привести к чтению бессмысленных данных.
Некоторые важные аспекты при работе с бинарными файлами:
- чтобы добавить новые данные в конец существующего бинарного файла выполняется оператор Seek # fn, Lot (fn)+1 для перемещения указателя в конец файла. Если записать данные в существующий бинарный файл в позицию перед концом файла новые данные будут записаны поверх существующего.
- При записи данных в позицию указателей находящегося за пределами файла они будут расширены до новой длины. Однако часть файла между первоначальным концом файла и новыми данными снижает (снимает) неопределенные значения.
- При чтении данных в позицию указателя выход за рамки файла не выдается сообщение об ошибке, но полученные в результате данные будут бессмысленными.