BlockRead

Adam Boduch
BlockRead
Moduł: System
```delphi procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]); ``` Czyta określony blok danych z pliku amorficznego. [[Delphi/Procedury|Procedura]] przydaje się w przypadku wszelkiego rodzaju operacjach na danych.

Parametr F musi być typu amorficznego - File. Parametr Buf może być dowolnego typu, do niego zostaną przpisane dane odczytane z pliku (bufor). Count określa ilość danych odcztytywanych i przypisywanych do bufora. Ostatni parametr - AmtTransfered określa ilość rzeczywiście odczytanych danych - ta wartość powinna być równa tej z parametru Count. Nie zawsze tak jest o czym przekonasz się w zaprezentowanym poniżej przykładzie. Program realizuje kopiowanie dwóch plików, kawałek po kawałku w porcjach po 1024 bajty. Będziemy więc w pętli czytali kolejne porcje danych, jeżeli wartość AmtTransfered jest mniejsza niż Count oznacza to, że odczytaliśmy plik do końca. Spójrz na poniższy kod źródłowy:

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