Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum_po_Turbo_Paskaliu.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.39 Mб
Скачать

Блочные файлы Описание типа блочного файла

С помощью блочных файлов возможно выполнение небуферизованных операций ввода-вывода, осуществляемых непосредственно между переменными программы и внешней дисковой памятью. По умолчанию элементами блочного файла являются блоки по 128 байт. Блочный файл может представлять любой дисковый набор данных. Поэтому такие операции, как Erase и Rename, могут быть выполнены с помощью блочных файлов.

Описание типа блочного файла состоит из ключевого слова file.

Синтаксис: описание-типа-блочного-файла: file

Пример:

Var DiskFile : file; FileName : string [40]; begin Write ('FileName:-'); Readln (FileName); Assign (DiskFile, FileName); Erase (DiskFile) end

Данная программа удалит произвольный набор данных на диске, имя которого будет введено с клавиатуры.

Тип элементов набора данных не имеет значения.

Выполнение операций ввода-вывода над блочными файлами осуществляется с помощью процедур BlockRead и BlockWrite. Они заменяют процедуры Read и Write, операции Assign, Reset, Rewrite, Close, Seek и Eof выполняют те же функции, что и для файлов других видов.

Процедура BlockRead

Синтаксис: BlockRead (FileVar, Buffer, Count, Reply)

    BlockRead (FileVar, Buffer, Count)

Filevar - имя файловой переменной, представляющей блочный файл, Buffer - имя произвольной программной переменной, Count - выражение типа integer, Reply - имя переменной типа integer.

Процедура BlockRead выводит из файла FileVar в область оперативной памяти, занимаемой переменной Buffer, Count блоков по 128 байт каждый. Если в процедуре указан параметр Reply, то этой переменной будет присвоено значение, определяющее фактическое количество записанных блоков. Если эта величина меньше Count, значит, указатель файла находится в конце.

Процедура BlockWrite

Синтаксис: BlockWrite (FileVar, Buffer, Count, Reply)

    BlockWrite (FileVar, Buffer, Count)

Filevar - имя файловой переменной, представляющей блочный файл, Buffer - имя произвольной программной переменной, Count - выражение типа integer, Reply - имя переменной типа integer.

Процедура BlockWrite записывает в файл FileVar из области оперативной памяти, занимаемой переменной Buffer, Count блоков по 128 байт каждый. Если в процедуре указан параметр Reply, то этой переменной будет присвоено значение, определяющее фактическое количество записанных блоков. Если эта величина меньше Count, значит, процедура выполнена неправильно.

Пример:

Program Copy; Var Src, Trg : file; Buffer : array [0..255,boolean] of byte; Source, Target : string [40]; Reply : integer; Begin Write ('Source:-'); Readln (Source); Write ('Target:-'); Readln (Target); Assign (Src,Source); Assign (Trg, Target); Reset (Src); Rewrite (Trg); repeat BlockRead (Src,Buffer,4,Reply); BlockWrite (Trg,Buffer,4,Reply) until Reply < 4; > Close (Src); Close (Trg) End.

Данная программа копирует набор данных с произвольным типом элементов.

Операции ввода-вывода

Способ контроля операций ввода-вывода зависит от способа компиляции программы. При заданной по умолчанию директиве {$I+} после каждой операции ввода-вывода контролируется её выполнение. Если будет обнаружена ошибка, выполнение программы прекратится и на консоли появится сообщение об ошибке с указанием её типа. После директивы {$I-} при обнаружении ошибки выполнение программы не прекратится, но будут отменены последующие действия по вводу-выводу до обращения к стандартной функции IOresult, которая возвращает целое число. Если результат этой функции 0, то предыдущие операции ввода-вывода выполнены правильно. В противном случае это число определяет код ошибки.

Список ошибок ввода-вывода

01

Файл не найден

02

Файл не открыт

03

Файл не открыт для чтения

04

Файл не открыт

10

Неправильное представление численного значения

20

Недопустимая операция

21

Недопустимая операция

22

Недопустимое использование процедуры Assign

90

Несоответствие размеров записей

99

Конец набора данных

F0

Ошибка при записи на диск

F1

Переполнение каталога

F2

Переполнение набора данных

FF

Набор данных не найден

Пример и возможности операций ввода-вывода

Пример:

Program Delete; Var FileVar : file; FileName : string [40]; Flag : boolean; begin Write ('FileName:='0); Readln (FileName); Assign (FileVar,FileName); {$I-} Erase (FileVar); {$I+} if not (Ioresult=0) then Writeln ('File'+FileName+'did not exist'); end.

С помощью данной программы будет удалён набор данных, имя которого будет указано с консоли.

Если указано имя несуществующего набора данных, то будет выведено сообщение, что этот набор данных не существует.

Если из программы удалить директивы компилятора, а удаляемый набор данных не существует, то выполнение программы будет прекращено из-за ошибки операции Erase, относящейся к несуществующему набору данных.