// There are five methods to copy a file, you can chose one to use:
// No 1:
Procedure FileCopy(
Const sourcefilename, targetfilename:
String );
Var
S, T: TFileStream;
Begin
S := TFileStream.Create( sourcefilename, fmOpenRead );
try
T := TFileStream.Create( targetfilename, fmOpenWrite
or fmCreate );
try
T.CopyFrom(S, S.Size ) ;
finally
T.Free;
end;
finally
S.Free;
end;
End;
// No 2:
{This way uses memory blocks for read/write.}
procedure FileCopy(
const FromFile, ToFile:
string);
var
FromF, ToF:
file;
NumRead, NumWritten: Word;
Buf:
array[1..2048]
of Char;
begin
AssignFile(FromF, FromFile);
Reset(FromF, 1);
{ Record size = 1 }
AssignFile(ToF, ToFile);
{ Open output file }
Rewrite(ToF, 1);
{ Record size = 1 }
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0)
or (NumWritten <> NumRead);
System.CloseFile(FromF);
System.CloseFile(ToF);
end;
// No 3.
{This one uses LZCopy, which USES LZExpand.}
procedure CopyFile(FromFileName, ToFileName:
string);
var
FromFile, ToFile:
File;
begin
AssignFile(FromFile, FromFileName);
{ Assign FromFile to FromFileName }
AssignFile(ToFile, ToFileName);
{ Assign ToFile to ToFileName }
Reset(FromFile);
{ Open file for input }
try
Rewrite(ToFile);
{ Create file for output }
try
{ copy the file an if a negative value is returned raise an exception }
if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) < 0
then
raise Exception.Create('
Error using LZCopy')
finally
CloseFile(ToFile);
{ Close ToFile }
end;
finally
CloseFile(FromFile);
{ Close FromFile }
end;
end;
// No 4:
procedure CopyFile(FromFileName, ToFileName:
string);
var
shellinfo: TSHFileOpStructA;
Files:
String;
begin
Files:=FromFileName+#0+#0;
with shellinfo
do
begin
Wnd:=Self.handle;
wFunc:=FO_COPY;
pFrom:=PChar(Files);
pTo:=PChar(ToFileName);
fFlags:=FOF_NOCONFIRMATION
or FOF_SILENT;
end;
SHFileOperation(shellinfo);
end;
// No 5:
copyfile(PChar(FromFileName),PChar(ToFileName),False);