Язык:
Русский
English
BlockRead (процедура)
Считывает одну или большее количество записей из файла в переменную.
Объявление
Procedure BlockRead(Var F : File; Var Buf; Count : Word
[; Var Result : Word]);
Где:
F нетипизированная файловая переменная
Buf любая переменная
Count выражение типа Word
Result переменная типа Word
Режим
Windows, Real, Protected
Замечания
Процедура 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 вернет нуль, если операция была успешной, иначе, она вернет отличный от нуля код ошибки.
Ограничения
Файл должен быть открыт.
Смотри также
Пример
Язык:
Русский
English
{ Пример программы для процедур BlockRead и BlockWrite }
uses Crt;
{ Простая программа быстрого копирования файлов БЕЗ проверки ошибок }
var
FromF, ToF : File;
NumRead, NumWritten : Word;
Buf : array[1 .. 2048] of Char;
begin
{ Открываем входной файл }
Assign(FromF, ParamStr(1));
FileMode := 0; { Режим только-чтение }
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.