Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 26 стр.

UptoLike

51
Бестиповые файлы
Стандарт Турбо Паскаля вводит особый файловый тип, являющийся,
по сути, обобщенным файловым типом. Мы будем называть его в дальней-
шем бестиповым файлом, поскольку его обозначение состоит только из слова
File без указания типа компонент.
Бестиповый файл - это очень мощное средство работы с файлами, так
как он позволяет манипулировать с данными, не задумываясь об их типе. С
его помощью можно записывать на диск произвольные участки рабочей па-
мяти ПЭВМ и считывать их в память диска. Можно также преобразовывать
считываемые из бестипового файла данные в любой формат посредством
приведения типов. В этом разделе будут рассмотрены некоторые примеры
использования бестиповых файлов.
Ввод - вывод в бестиповый файлы осуществляется специальными про-
цедурами BlockRead и BlockWrite. Кроме того, расширяется синтаксис
процедур Reset и Rewrite. В остальном, принципы работы остаются такими
же, как и с типизированными файлами. Перед использованием файловая пе-
ременная f (логический файл)
var
f: File;
должна быть связана с конкретным физическим файлом через вызов операто-
ра Assign. Далее файл должен быть открыт для чтения или записи с помощью
вызова процедуры Reset(f) или Rewrite(f) соответственно. После окончания
работы файл должен быть закрыт процедурой Close(f).
Открывая бестиповый файл для работы, мы неявно устанавливаем раз-
мер буфера передачи данных равным 128 байт. Однако можно явным
способом указать иной размер буфера (чем он больше, тем быстрее происхо-
дит ввод - вывод), исходя из ресурсов памяти и удобства работы с данными.
Для задания буфера надо после оператора Assign открывать файл расширен-
ной записью процедур:
Reset (var f: File; BufSize: Word)
и
Rewrite (var f: File; BufSize: Word).
Параметр BufSize задает число байтов, считываемых из файла за одно
обращение к нему или записываемых в него. Чем больше значение BufSize,
тем быстрее происходит обмен данными между носителем файла (как прави-
52
ло, диском) и оперативной памятью ПЭВМ. Но тем больше и расход памяти.
Ведь именно в ней располагается буфер файла.
Минимальный блок, который может быть записан или прочитан из
файла, это 1 байт. Чтобы задать его, надо установить именно такую величину
буфера при открытии файла. Максимальный размер блока не может превы-
шать 64К.
Во время отладки программ в среде Турбо Паскаль можно проверить
размер буфера, поместив в окно просмотра (Watch) или анализа (Evaluate)
файловую переменную f, приведенную к типу FileRec (для этого может пона-
добиться подключение модуля DOS):
FileRec (f),R
или, конкретнее,
FileRec(f), BufSize
Для чтения или записи данных в бестиповый файл стандартные проце-
дуры Read и Write не годятся. Их заменяют здесь процедуры:
BlockRead (var f: File; var Destin; Count: Word
[; var Re: Word])
BlockWrite (var f: File; var Source; Count:
[; var Wr: Word]).
Эти процедуры осуществляют чтение в переменную Destin и запись из
переменной Source не компонентов файла или его строк, а блоков, состоящих
из того количества байтов, которое определено для буфера файла f. Значение
Count, меньшее единицы, не имеет смысла. Всегда должно выполняться ус-
ловие:
Count Размер_буфера<64К.
Необязательный параметр Re возвращает число блоков, считанное те-
кущей операцией BlockRead. Аналогичный параметр Wr процедуры
BlockWrite после каждой операции записи показывает число блоков, запи-
санное в данный файл этой операцией.
Если операции записи или чтения прошли успешно, то значения Re и
Wr будут равны соответствующим значениям параметров Count. Но если
произошел сбой при вводе- выводе, и заказанное число блоков не перене-
слось, то параметры Re и Wr будут содержать целое число удачно
перенесенных блоков (неудача посередине блока практически равносильна
отмене его чтения или записи). Таким образом, эти параметры могут исполь-
зоваться для контроля выполнения операций BlockRead и BlockWrite:
                          Бестиповые файлы                                  ло, диском) и оперативной памятью ПЭВМ. Но тем больше и расход памяти.
                                                                            Ведь именно в ней располагается буфер файла.
                                                                                  Минимальный блок, который может быть записан или прочитан из
       Стандарт Турбо Паскаля вводит особый файловый тип, являющийся,
                                                                            файла, это 1 байт. Чтобы задать его, надо установить именно такую величину
по сути, обобщенным файловым типом. Мы будем называть его в дальней-
                                                                            буфера при открытии файла. Максимальный размер блока не может превы-
шем бестиповым файлом, поскольку его обозначение состоит только из слова
                                                                            шать 64К.
File без указания типа компонент.
                                                                                  Во время отладки программ в среде Турбо Паскаль можно проверить
       Бестиповый файл - это очень мощное средство работы с файлами, так
                                                                            размер буфера, поместив в окно просмотра (Watch) или анализа (Evaluate)
как он позволяет манипулировать с данными, не задумываясь об их типе. С
                                                                            файловую переменную f, приведенную к типу FileRec (для этого может пона-
его помощью можно записывать на диск произвольные участки рабочей па-
                                                                            добиться подключение модуля DOS):
мяти ПЭВМ и считывать их в память диска. Можно также преобразовывать
                                                                                                                  FileRec (f),R
считываемые из бестипового файла данные в любой формат посредством
                                                                                                                или, конкретнее,
приведения типов. В этом разделе будут рассмотрены некоторые примеры                                           FileRec(f), BufSize
использования бестиповых файлов.                                                  Для чтения или записи данных в бестиповый файл стандартные проце-
       Ввод - вывод в бестиповый файлы осуществляется специальными про-     дуры Read и Write не годятся. Их заменяют здесь процедуры:
цедурами BlockRead и BlockWrite. Кроме того, расширяется синтаксис                BlockRead (var f: File; var Destin; Count: Word
процедур Reset и Rewrite. В остальном, принципы работы остаются такими                                               [; var Re: Word])
же, как и с типизированными файлами. Перед использованием файловая пе-            BlockWrite (var f: File; var Source; Count:
                                                                                                                              [; var Wr: Word]).
ременная f (логический файл)
                                                                                  Эти процедуры осуществляют чтение в переменную Destin и запись из
       var
                                                                            переменной Source не компонентов файла или его строк, а блоков, состоящих
           f: File;
должна быть связана с конкретным физическим файлом через вызов операто-     из того количества байтов, которое определено для буфера файла f. Значение
ра Assign. Далее файл должен быть открыт для чтения или записи с помощью    Count, меньшее единицы, не имеет смысла. Всегда должно выполняться ус-
вызова процедуры Reset(f) или Rewrite(f) соответственно. После окончания    ловие:
работы файл должен быть закрыт процедурой Close(f).                                                       Count Размер_буфера<64К.
       Открывая бестиповый файл для работы, мы неявно устанавливаем раз-          Необязательный параметр Re возвращает число блоков, считанное те-
мер буфера передачи данных равным 128 байт. Однако можно явным              кущей операцией BlockRead. Аналогичный параметр Wr процедуры
способом указать иной размер буфера (чем он больше, тем быстрее происхо-    BlockWrite после каждой операции записи показывает число блоков, запи-
дит ввод - вывод), исходя из ресурсов памяти и удобства работы с данными.   санное в данный файл этой операцией.
Для задания буфера надо после оператора Assign открывать файл расширен-           Если операции записи или чтения прошли успешно, то значения Re и
ной записью процедур:                                                       Wr будут равны соответствующим значениям параметров Count. Но если
                          Reset (var f: File; BufSize: Word)                произошел сбой при вводе- выводе, и заказанное число блоков не перене-
                                            и                               слось, то параметры Re и Wr будут содержать целое число удачно
                         Rewrite (var f: File; BufSize: Word).              перенесенных блоков (неудача посередине блока практически равносильна
       Параметр BufSize задает число байтов, считываемых из файла за одно   отмене его чтения или записи). Таким образом, эти параметры могут исполь-
обращение к нему или записываемых в него. Чем больше значение BufSize,      зоваться для контроля выполнения операций BlockRead и BlockWrite:
тем быстрее происходит обмен данными между носителем файла (как прави-


                                   51                                                                          52