BlockRead (Delphi)
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
- System.BlockRead ( fr | de | ja )
- System.BlockWrite ( fr | de | ja )
- System.Close ( fr | de | ja )
- System.CloseFile ( fr | de | ja )
- Vcl.Dialogs.TSaveDialog ( fr | de | ja )
- System.Rewrite ( fr | de | ja )