BlockRead, процедура

Синтаксис


procedure BlockRead(var F:  File;  var Buffer;  Count:  Integer); 
procedure BlockRead(var F:  File;  var Buffer;  Count:  Integer;
   var RecordCount:  Integer);

Описание

Процедуру BlockRead вызывают для того, чтобы прочитать в Buffer Count записей из двоичного файла. Если F - нетипизированный файл, BlockRead использует размер записи, указанный при открытии файла процедурой Reset. Если вы указываете переменную RecordCount, BlockRead записывает в нее количество фактически прочитанных записей. В случае ошибки или конца файла, RecordCount может быть меньше, чем Count. BlockRead не является настоящей процедурой.

Ошибки

  • Если аргумент RecordCount не указан, и функция BlockRead столкнулась с ошибкой или концом файла, возникает ошибка ввода/вывода 100.
  • Если файл не открыт, BlockRead выдает ошибку ввода/вывода 103.

Советы и приемы

  • Аргумент Buffer - это не указатель, а нетипизированный var-napaметр. Передавайте саму переменную, а не ее адрес. Если вы передаете указатель на динамически выделенный буфер, разыменуйте ссылку при вызове BlockRead.
  • Чаще всего BlockRead применяется для чтения сразу нескольких записей или сложных структур данных, которые не удается аккуратно записать в простой типизированный файл. Предположим, что первые четыре байта файла содержат длину строки, а непосредственно за ними следует сама строка, и вы хотите прочитать эти данные в длинную строку. В таком случае придется читать длину строки и ее содержимое по отдельности, как показано в примере.

Пример


//Чтение строки из двоичного файла.
// Строка начинается с четырехбайтовой длины.
function ReadString(var F: File): string;
var Len: Longlnt; begin
BlockRead(F, Len, SizeOf(Len)); SetLength(Result, Len); if Len > 0 then
BlockRead(F. Result[1], Len);
end;

Смотрите также

Процедуры Assign,BlockWrite, CloseFile, Reset, Rewrite, функцияIOResult,
    Учебник по языку Pascal          Лабораторные работы по программированию          Справочник



2022-03-30 12:17:18






Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: