1.利用Windows API:
CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL
procedure TFrmMain.Button1Click(Sender: TObject);
var
sSo: string;
begin
with TOpenDialog.Create(nil) do
begin
DefaultExt := 'xls';
Filter := '*.xls';
try
if Execute then
sSo := filename
else
exit;
finally
free;
end;
end;
//就使用下面一句即可拷贝
CopyFile(pchar(sSo), pchar('e:/x.xls'), false);
//最后一参数True表示若存在相同目标文件则不拷贝,False表示无论目标文件是否存在都将覆盖
end;
2.文件流
function TFrmMain.CopyFile(sSour, sDest: string): Boolean;
var
fSour, fDest: TFileStream;
begin
Result := False;
if not FileExists(sSour) then
Exit;
fSour := TFileStream.Create(sSour, fmOpenRead);
fDest := TFileStream.Create(sDest, fmOpenWrite or fmCreate);
try
fDest.CopyFrom(fSour, fSour.Size);
Result := FileExists(sDest);
finally
fDest.Free;
fSour.Free;
end;
end;
3.利用内存块读写buffer实现
procedure TFrmMain.FileCopy(const Fromfile,Tofile:string);
Var
F1,F2:file;
NumRead,Numwritten:Longint;
Buf:array [1..2048] of char;
Begin
AssignFile(F1,Fromfile);
Reset(F1,1);
AssignFile(F2,Tofile);
Rewrite(F2,1);
Repeat
BlockRead(F1,buf,sizeof(buf),NumRead);
BlockWrite(F2,buf,Numread,NumWritten);
Until (NumRead=0) or (NumWritten<>NumRead);
CloseFile(F1);
CloseFile(F2);
End;