Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Остатки лекций по ИиП.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
55.81 Кб
Скачать

9. Нетипизированные файлы.

У подобных файлов не указывается тип компонент. Это делает их совместимыми с другими видами файлов.

Файлы без типа удобны для организации доступа к физическим файлам любой структуры, для которых важно лишь одно – величина (размер) компонент. Содержание – вне интереса. Поэтому чаще всего такие файлы применяют для быстрого обмена данными между физическим файлом и оперативной памятью, т.е. для копирования. Причем без использования буферной памяти, которая всегда требуется для файлов с типом. Это существенно повышает скорость, что имеет важное значение при больших объемах данных..

Нетипизированные файлы оперируют т.н. блоками записей. Они имеют номера, что позволяет реализовывать прямой доступ к записям. Стандартная длина блока – 128 байтов. Но ее можно изменить (максимально до 65535 байтов) при открытии файла, задав вторым параметром в RESET или REWRITE. Например:

RESET(…,512);

Или REWRITE(…,1024);

При организации быстрого обмена следует учитывать, что:

1. длина записи (компоненты) должна быть кратна размеру физического сектора диска, т.е. 512 байт; но надо помнить, что т.к. последняя запись может быть неполной, то весь файл гарантированно может быть скопирован только при размере записи, равной 1;

2. если учесть, что на деле обменная порция соизмеряется с т.н. кластером - 2-мя и более свободными смежными секторами (в зависимости от типа диска), то длину записи целесообразно приравнивать его длине; это ускорит скорость обмена данными между физическим файлом и оперативной памятью;

3. доступ к любой компоненте нетипизированного файла осуществляется известными стандартными процедурами SEEK, FILESIZE и FILEPOS; но чтение и запись компонент производится не по READ и по WRITE соответственно, а с помощью следующих высокоскоростных процедур:

BLOKREAD(<имя файловой переменной >,<имя буф. перем.>,N[,FZ]);

BLOKWRITE(<имя файловой переменной >,<имя буф. перем.>,N[,FZ]);

где: буф. перем. – буферная переменная в оперативной памяти для

обмена данными с дисками;

N – количество записей, которые читаются или записываются за

одно обращение к диску;

FZ – необязательный параметр, фиксирующий количество фактически прочитанных записей.

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

За один вызов может быть передано N*RAZM байт, где RAZM – длина записи нетипизированного файла из RESET или REWRITE.

Надо заботится о том, чтобы физическая длина буферной переменной была достаточной для размещения всех N*RAZM байт. Если она меньше, то возникает ошибка ввода-вывода, которую можно предупредить указанием FZ.