BlockWrite

Adam Boduch
BlockWrite
Moduł: System
```delphi procedure BlockWrite(var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]); ``` Zapisuje bloki danych do pliku amorficznego określonego w parametrze F. Parametr Buf może być dowolnego typu, musi przechowywać dane, które zostaną przypisane do pliku (bufor). Count określa ilość danych zapisywanych do pliku. Ostatni parametr AmtTransfered określa ilość rzeczywistych danych, które zostały zapisane (przetransferowane). Spójrz na poniższy przykład, który pokazuje sposób skopiowania pliku przy pomocy funkcji BlockWrite oraz [[Delphi/BlockRead]]:
program Foo;

{$APPTYPE CONSOLE}

uses
  System;

var
  Src, Dst : File;
  BytesRead, BytesWrite : Integer;
  TotalBytes : Integer = 0;
  Buff : array[0..1024] of Byte;
begin
  AssignFile(Src, 'C:\Aplikacja.exe');
  try
    Reset(Src, 1);
    AssignFile(Dst, 'C:\Aplikacja.exe.bak');
    try
      ReWrite(Dst, 1);

      repeat
        BlockRead(Src, Buff, 1024, BytesRead);
        BlockWrite(Dst, Buff, BytesRead, BytesWrite);

        // zliczanie całkowitej ilości odczytanych bajtów
        TotalBytes := TotalBytes + BytesWrite;
      until (BytesRead = 0) or (BytesWrite <> BytesRead);
    finally
      CloseFile(Dst);
    end;
  finally
    CloseFile(Src);
  end;

  Writeln('Skopiowano... całkowity rozmiar pliku: ', TotalBytes, ' bajtów');
  Readln;
end.

Na samym początku, program otwiera plik źródłowy oraz tworzy plik docelowy. W obu przypadkach określiliśmy rozmiar rekordu na poziomie 1 bajtu (w procedurach Reset oraz Rewrite). Następnie w pętli kopiujemy kolejne porcje danych, które zostaną zapisane do tablicy Buff. Tak odczytane dane zapisujemy do pliku (kopii) przy pomocy procedury BlockWrite. Po skopiowanie pliku (warunek zakończenia pętli: BytesRead równe zero), wyświetlony zostanie komunikat.

Zobacz też:

0 komentarzy