Практика программирования (Бейсик, Си, Паскаль)

       

Наиболее распространенным видом файлов являются


Работа с дисковыми файлами

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

Оценивая ключевые аспекты процесса обмена данными, можно сказать, что работа с файлами, в основном, ограничивается тремя-четырьмя операциями:

  • выделение ресурсов и приведение файла в состояние готовности к обмену (именно это скрывается за термином "открыть файл");

  • чтение (ввод из файла) или запись (вывод в файл) очередной порции данных;

  • возврат выделенных ресурсов и завершение неоконченных операций (этому соответствует термин "закрыть файл").

    Несмотря на кажущуюся простоту процесса обмена данными, файловые операции достаточно сложны в освоении. Ну как, например, не спасовать перед системной библиотекой Си, которая насчитывает более 85 функций, обслуживающих дисковые файлы, и свыше 60 констант, задающих режимы работы файловых процедур. В QBasic и Паскале количество соответствующих процедур существенно меньше, однако подводные камни встречаются и там.

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

  • "S1S2S3.. .Sk" (переменное число символов, заключенных в одинарные или двойные кавычки);

  • kS1S2.. .Sk (k — однобайтовый или двухбайтовый указатель числа символов, предшествующий тексту);


  • S1S2...Sk\0 (\0 — однобайтовый признак конца строки, расположенный вслед за последним символом текста);

  • S1S2...Sk OD ОА (двухбайтовый признак конца строки, OD -- "возврат каретки", ОА - "перевод строки").

    Числовая информация может быть записана в дисковый файл либо в машинном формате (а в Си и Паскале количество разных типов числовых данных достигает десятка), либо с предварительным преобразованием из машинного представления в символьное.

    Кроме числовых и текстовых данных в файлах может храниться информация и другого происхождения. Например, графические изображения, которые в процессах обмена данными выступают как двоичные коды, условно разделенные на байты. Естественно, что на содержимое этих байтов нельзя реагировать так же, как на некоторые управляющие коды типа "возврат каретки", "Перевод строки", "Признак конца файла", влияющие на передачу числовой и текстовой информации.

    Кроме того, существует несколько способов доступа к файловым данным, из которых на практике чаще всего используют два — последовательный и произвольный. Последний иногда называют прямым (DIRECT ACCESS) или случайным (RANDOM ACCESS). Последовательный доступ при записи на диск характерен тем, что очередная записываемая порция пристраивается в хвост к предыдущей. Размеры смежных порций при этом, могут оказаться разными по длине. При чтении такой набор данных начинает извлекаться с самой первой порции и очередность считываемых данных повторяет их последовательность во время записи.

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

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

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



    Содержание раздела