输入“拷贝”或“复制”检索一下,大把大把的是,这是我检索来的
function CopyFile(SourceName,TargetName:String):Boolean;
var
F:TShFileOpStruct;
begin
F.wnd:=InputForm.Handle;
F.wFunc:=FO_COPY; {操作方式}
F.pFrom:=PChar(SourceName+#0#0);
F.pTo:=PChar(TargetName+#0#0);
F.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION;
result:= ShFileOperation(F)=0;
end;
来自:沈前卫 时间:2000-4-11 22:47:43 ID:217955
王俊、刘周章
Delphi中有关文件操作的函数不少,但唯独没有提供一个文件拷贝函数。出于实际编
程的需要,笔者总结了几种在Delphi中进行文件拷贝的方法,这几种方法都在Delphi 3.0、
4.0下通过,有兴趣的读者可以将它们转化成函数以方便调用。
方法1(强力推荐)
通过调用Win 95系统外壳来完成,需要在USES子句中添加SHELLAPI单元。这种方法
与Win 95下文件拷贝的方式完全一样,也会自动出现“正在拷贝...”的提示。如果目标
文件已经存在,函数可以根据操作标志位自动生成多份复件。
改变wFunc的值,则可以完成删除、更名、放到回收站等功能。笔者认为这是最好的
一种方法。
procedure TForm1.Button5Click(Sender: TObject);
var
F:TShFileOpStruct;
begin
F.wnd:=Handle;
F.wFunc:=FO—COPY; {操作方式}
F.pFrom:=′C:/DEMO.DAT′;
F.pTo:=′F:/TEST.DAT′;
F.fFlags:=FOF—ALLOWUNDO OR FOF—RENAMEONCOLLISION; {操作选项}
if ShFileOperation(F)<>0 then
ShowMessage(′文件拷贝失败!′);
end;
?方法2 (推荐使用)
采用文件流方式,可以直接对文件进行读写。
procedure TForm1.Button2Click(Sender: TObject);
Var
S, T: TFileStream; {文件流}
SourceFileName,DestFileName:String;{源文件和目的文件名}
Begin
S := TFileStream.Create( SourceFileName, fmOpenRead );
try
T := TFileStream.Create( DestFileName,fmOpenWrite or fmCreate );
try
T.CopyFrom(S, S.Size ) ;
finally
T.Free;
end;
finally
S.Free;
end; End;
?方法3(推荐在做安装盘时使用)
采用压缩与解压缩单元LZEXPAND,需要在USES子句中添加LZEXPAND单元。
procedure TForm1.Button3Click(Sender: TObject);
var
SourceHandle, DestHandle: Integer; {文件句柄}
SourceFileName,DestFileName:String;{源文件和目的文件名}
begin
{打开文件}
SourceFileName:=′C:/DEMO.DAT′;
DestFileName:=′F:/TEST.DAT′;
SourceHandle := FileOpen(SourceFileName,0);
DestHandle := FileCreate(DestFileName);
{拷贝}
LZCopy(SourceHandle,DestHandle);
{关闭文件}
FileClose(SourceHandle);
FileClose(DestHandle)
end;
?方法4(推荐使用)
采用内存流,内存流可直接将文件数据存放到内存中,代码简单,速度很快。
procedure TForm1.Button4Click(Sender: TObject);
var
SourceFileName,DestFileName: String;
begin
with TMemoryStream.Create do
try
LoadFromFile(SourceFileName);
SaveToFile(DestFileName);
finally
Free;
end; end;
?方法5(不常用)
采用最基本的文件读写,每次读写一个块。但如果源文件是只读属性,本方法不适
用,会出现文件存取错误。
procedure TForm1.Button1Click(Sender: TObject);
var
SourceF,DestoF: File; {文件变量}
NumRead, NumWritten: Integer;{读写字节数}
Buf: array[1..2048] of Char; {缓冲区大小}
SourceFileName,DestFileName:String;{源文件和目的文件名}
begin
SourceFileName:= ′C:/DEMO.DAT′;
DestFileName:=′F:/TEST.DAT′;
AssignFile(SourceF, SourceFileName);
Reset(SourceF, 1); { Record size = 1 }
AssignFile(DestF, DestFileName); { Open output file }
Rewrite(DestF, 1); { Record size = 1 }
repeat
BlockRead(SourceF, Buf, SizeOf(Buf), NumRead);
BlockWrite(DestF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(SourceF);
CloseFile(DestF);
end;