Процедура BlockRead

Считывает одну или большее количество записей из файла в переменную.

Объявление:

Procedure BlockRead(Var F : File; Var Buf; Count :Word [; Var Result : Word]);  
                 
Где:

F - нетипизированная файловая переменная 

Buf - любая переменная  

Count - выражение типа 

Word Result - переменная типа Word.

Режим:

Windows,  Protected,  Real

Замечание:

Процедура BlockRead считывает Count или меньшее количество записей из файла F в блок памяти, начинающийся с первого байта, занятого переменной Buf. Реальное количество прочитанных записей (меньшее или равное Count) возвращается в необязательном параметре Result. Если параметр Result не определен, то в случае, когда количество прочитанных записей не равно параметру Count, происходит ошибка ввода/вывода. Весь считанный блок занимает максимум Count * RecSize байт, где RecSize - размер записи, определяемый при открытии файла (или 128 байт, если размер записи не был определен). Если Count * RecSize больше, чем 64Кб, то происходит ошибка. Параметр Result является необязательным. Если весь запрошенный блок был считан, то Result будет равно Count. Иначе, в случае, если Result меньше, чем Count, то конец файла был достигнут прежде, чем было завершено и параметр RecSize был больше 1, то Result вернет количество целиком считанных записей. Указатель текущей позиции файла перемещается на количество записей, равное значению параметра Result. В режиме {$I-} функция IOResult вернет нуль, если операция была успешной, иначе, она вернет отличный от нуля код ошибки. Файл должен быть открыт.

Пример:

{Blockrd.PAS}                                                             
 
  {Пример программы для процедур BlockRead и BlockWrite }
 
  Uses WinCrt;
 
  Program CopyFile;
 
  { Простая программа быстрого копирования файлов БЕЗ проверки ошибок } 
 
  Var       FromF, ToF : File;
   NumRead, NumWritten : Word; 
                   Buf : Array [1..2048] Of Char;
  Begin 
   { Открываем входной файл }
   Assign(FromF, ParamStr(1));
   Reset(FromF, 1);  { Размер буфера записи = 1 байт }
   { Открываем выходной файл }
   Assign(ToF, ParamStr(2));
   ReWrite(ToF, 1);  { Размер буфера записи = 1 байт } 
   WriteLn('Копирую ', FileSize(FromF), ' байт...');
   Repeat
    BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
    BlockWrite(ToF, Buf, NumRead, NumWritten);
   Until (NumRead = 0) Or (NumWritten <> NumRead);
   Close(FromF);
   Close(ToF);
  End.