BlockRead

From Delphi & Pascal (česká wiki)
Jump to navigation Jump to search

Načte jednu nebo více vět ze souboru do proměnné.

Deklarace
procedure BlockRead(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 načte Count nebo méně vět ze souboru F do paměti, počínaje na prvním bajtu, který zabírá Buf. Skutečný počet úplných přečtených vět (který je menší nebo roven Count), se vrací v nepovinném parametru Result. Pokud Result není určen, při nepřečtení 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 bylo dosaženo konce souboru. V tom případě, pokud je délka věty větší než jedna, Result vrací počet načtených úplných vět.
Aktuální pozice v souboru se posune v důsledku volání BlockRead 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é
BlockWrite


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.