|
Учебник по 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.
В общем, использовать нетипизированные файлы несложно. Они очень полезны,
когда важна скорость работы.
|
|
|