请问如何使用程序拷贝文件?(100分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间

Unregistered / Unconfirmed
GUEST, unregistred user!
本人需要用程序把某目录文件拷贝到特定的目录中,不知道怎样实现!希望回答的具体些!
 
输入“拷贝”或“复制”检索一下,大把大把的是,这是我检索来的

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;

 
 
将文件考到指定目录下:
CopyFile('c:/abc/abc.exe','d:/win/aaa.exe',False);
c:/abc/abc.exe为源文件
d:/win/aaa.exe为目标文件
False覆盖文件
 
谢谢你的帮助!我已经完成了!
 
后退
顶部