Programowanie w języku Delphi

BlockRead

  • 2010-10-31 18:27
  • 0 komentarzy
  • 2078 odsłon
  • Oceń ten tekst jako pierwszy
BlockRead
Moduł: System

procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);

Czyta określony blok danych z pliku amorficznego. 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ż: