//方式1,用文件流的方式
Procedure TForm1.fFileCopy( 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;
//方式2,用内存块的方式
procedure TForm1.fFileCopy2(const FromFile, ToFile: string);
var
FromF, ToF :file;
NumRead, NumWritten :Integer;
Buf: array[1..2048] of Char;
begin
AssignFile(FromF, FromFile);
Reset(FromF, 1);
AssignFile(ToF, ToFile);
Rewrite(ToF, 1);
repeat
BlockRead(FromF,Buf,SizeOf(Buf),NumRead);
BlockWrite(ToF,Buf,NumRead,NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;
//调用,拷贝一个104M的文件,方式1用时11秒,方式2用时7秒,看来用内存块读取还是挺快的。
fFileCopy('D:/TDownload/Office2003-SP3.rar','F:/Office2003-SP3.rar'); //11秒
fFileCopy2('D:/TDownload/Office2003-SP3.rar','F:/Office2003-SP3.rar'); //7秒