Записывает одну или большее количество записей из переменной в файл.
Объявление:
Procedure BlockWrite(Var F : File; Var Buf; Count : Word [; Var Result : Word]); Где: F - нетипизированная файловая переменная Buf - любая переменная Count выражение типа Word Result - переменная типа Word.
Режим:
Windows, Protected, Real
Замечание:
Процедура BlockWrite записывает 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.