Учебник по Delphi

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

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

   Для работы с нетипизированными файлами в Delphi предусмотрены процедуры BlockRead и BlockWrite. Они используются почти так же, как Read и Write, за исключением того, что указывается не переменная, а буфер (массив) и количество записей, которые нужно прочитать или записать. Не совсем понятно? Тогда, чтобы разобраться, нужно привести пример (его можно найти на компакт-диске, прилагаемом к книге, по адресу Examples\FilesReadNWrite).

   Создадим новый проект. Красоту наводить не будем — в данный момент это ни к чему. Просто поместим на форму две кнопки (Buttonl и Button2) и назовем их Запись и Чтение соответственно. В процедуре Button1click будем записывать нетипизированный файл, а в процедуре Button2click — его читать.

Листинг 8.18
procedure TForml.ButtonlCI ick(Sender: TObject);
var
BUF: array [1. .100000] of Byte;
F: File;
begin
AssignFile(F,block.dat);
Rewrite(F,512);
Bloc kWrite(F,BUF, 100);
CloseFi le(F);
end;

   Таким образом записывается нетипизированный файл. Файловая переменная объявляется так же, как для работы с типизированным файлом, только не указывается тип:

F: File;

   Открывается файл тоже аналогично. Только в процедурах Rewrite или Reset можно задать длину записи в байтах (в данном примере — 512). Если длину не указать, то она устанавливается равной 128 байт.

   Затем данные записываются в файл с помощью процедуры BlockWrite. В качестве параметров мы указали файловую переменную F, буфер BUF (массив, из, которого записываются данные) и количество записей (100).

   Имейте в виду, что если длина записи составляет 512 байт, а в BlockWrite задано 100 записей, то реально на диск из массива записывается 51 200 байт, то есть эти два параметра умножаются друг на друга.

Листинг 8.19
procedure TForml. Button2CI ick(Sender: TObject);
var
BUF: array [1.. 100000] of Byte;
F: File;
begin
AssignFile(F,block.dat);
Reset(F,512);
BlockRead(F,BUF,100);
CloseFi le(F);
end;

   В приведенном листинге показано, как происходит чтение нетипизированного файла в массив. Здесь все точно так же, как при записи файла, только вместо BlockWrite используется BlockRead.

В общем, использовать нетипизированные файлы несложно. Они очень полезны, когда важна скорость работы.




 

Рейтинг@Mail.ru          Rambler's Top100

X-ZiBiT