BlockWrite

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání

Zapíše jednu nebo více vět z proměnné

Deklarace
procedure BlockWrite(var f: File; var Buf; Count: Word [; var Result: Word]);

kde:

 F        je proměnná - soubor bez typu
 Buf      je libovolná proměnná
 Count    je výraz typu Word
 Result   je proměnná typu Word
Režim
Windows, Reálný, Chráněný
Poznámky
F je proměnná - soubor bez typu, Buf je libovolná proměnná, Count je výraz typu Word a Result je proměnná typu Word .
BlockRead zapíše Count nebo méně vět do souboru F z paměti, počínaje na prvním bajtu, který zabírá Buf. Skutečný počet úplných zapsaných vět (který je menší nebo roven Count), se vrací v nepovinném parametru Result . Pokud Result není určen, při nezapsání zadaného počtu vět dojde k chybě I/O.
Celý přenesený blok zabírá maximálně Count symbolů * RecSize bajtů, přičemž RecSize je délka věty, stanovená při otevírání souboru. Není-li stanovena, je rovna 128 bajtů. Pokud Count symbolů * RecSize je větší než 65.535 bajtů (64K), generuje se chyba.
Result je nepovinný parametr. Pokud byl přenesen celý blok, je Result při návratu roven Count. Jinak, jestliže Result je menší než Count, před dokončením přenosu byl zaplněn disk. V tom případě, pokud je délka věty větší než jedna, Result vrací počet zapsaných úplných vět.
Aktuální pozice v souboru se posune v důsledku volání BlockWrite o Result vět.
V režimu {$I-} vrací funkce IOResult hodnotu 0 pro úspěšnou operaci, jinak nenulový chybový kód.
Omezení
Soubor musí být otevřený.
Viz také
BlockRead


Vzorový příklad

{Blockrd.PAS}
{Vzorový příklad pro procedury BlockRead a BlockWrite.}
program CopyFile;
{ Prostý kopírovací program bez kontroly chyb }
{ Pro Windows: }
{ uses WinCrt; }
var
  FromF, ToF: file;
  NumRead, NumWritten: Word;
  Buf: array[1..2048] of Char;
begin
  Assign(FromF, ParamStr(1));   { Otevři vstupní soubor }
  Reset(FromF, 1);              { Velikost záznamu = 1 }
  Assign(ToF, ParamStr(2));     { Otevři výstupní soubor }
  Rewrite(ToF, 1);              { Velikost záznamu = 1 }
  Writeln('Kopíruje se ', FileSize(FromF), ' bajtů...');
  repeat
    BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
    BlockWrite(ToF, Buf, NumRead, NumWritten);
  until (NumRead = 0) or (NumWritten <> NumRead);
  Close(FromF);
  Close(ToF);
end.