BlockRead (Delphi)

From RAD Studio Code Examples
Jump to: navigation, search

Description

This example reads an entire file into a buffer with one command and then writes it into a saved file. Validate the saved file contents.

Note: System.BlockRead and System.BlockWrite should be used with great care because untyped parameters can be the source of memory corruption. It is preferable to use newer functionality such as streams.

Code

procedure TForm1.Button1Click(Sender: TObject);
var
  FromF, ToF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..2048] of Char;
begin
  if OpenDialog1.Execute then     { Display Open dialog box. }
  begin
    AssignFile(FromF, OpenDialog1.FileName);
    Reset(FromF, 1);	{ Record size = 1 }
    if SaveDialog1.Execute then      { Display Save dialog box. }
    begin
      AssignFile(ToF, SaveDialog1.FileName);	{ Open output file. }
      Rewrite(ToF, 1);	{ Record size = 1 }
      Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
        + ' bytes...');
      repeat
        System.BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
      // Use CloseFile rather than Close; Close is provided for backward compatibility.
      CloseFile(FromF);
      CloseFile(ToF);
      Canvas.TextOut(120, 10, ' done.');
    end;
  end;
end;

Uses