如何拷贝文件?(delphi)(40分)

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

efan

Unregistered / Unconfirmed
GUEST, unregistred user!
有类似renamefile的拷贝命令吗?
 
还有一个Windows的API比CopyFile()更强大——CopyFileEX
详情看Delphi的帮助文件
 
copyfile(existingfilename:pchar,newfilename:pchar,failifexist:boolean)
existingfilename:是源文件路径
nwefilename:是新的文件路径
failifexist:如果存在是否覆盖
 
要说的都说完了。
 
1. 使用read, write
2. 使用CopyFile, CopyFileEX
3. 使用流
 
用 ShellAPI 中的 ShellExecute 用 DOS命令 COPY !
也可以 RENAME , MOVE 等等...... 简单啊 ......
参数不用说了吧! :)

速度快, 不过界面效果就....

土办法我有的是啊! :)
 
我是白痴!
 
使用api好一些,以下是源码

procedure CopyFile(fn, tn:String);
Var
ff, tf:File;
begin
AssignFile(ff, fn);
AssignFile(tf, tn);
Reset(ff);
try
Rewrite(tf);
try
if LZCopy(TFileRec(ff).Handle,TFileRec(tf).Handle)<0 then
raise EInOutError.Create('Error in copying file');
finally
CloseFile(tf);
end;
finally
CloseFile(ff);
end;
end;

 
GetFileTitle 返回文件名
MoveFile 更名文件
MoveFileEx 更名文件
CopyFile 复制文件
DeleteFile 删除文件
 
unit SAVET;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,SHELLAPI;

type
TForm1 = class(TForm)
SaveDialog1: TSaveDialog;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
F:TSHFILEOPSTRUCT;
begin
SaveDialog1.FileName:=extractfilepath(application.exename)+'PZCCK1.DBF';
IF SaveDialog1.Execute THEN
BEGIN
F.Wnd:=Handle;
F.wFunc:=fo_COPY;
F.pfrom:=PCHAR(extractfilepath(application.exename)+'PZCCK1.DBF');
f.pto:=PCHAR(SaveDialog1.FileName);
f.fFlags:=FOF_ALLOWUNDO OR FOF_RENAMEONCOLLISION or FOF_SIMPLEPROGRESS;
IF SHFILEOPERATION(F)<>0 THEN
SHOWMESSAGE('文件拷贝失败!');
END;
HALT;
end;

end.
 
本人有如下的源程序,不知合你意否?!
Var
Infile,OutFile:File;
NumRecsRead:integer;
Buf:array[1..4096] of Byte;
begin
If FileExists(SourceFile) then
begin
AssignFile(InFile,SourceFile);
AssignFile(Outfile,TargetFile);
Reset(InFile,1);
Rewrite(OutFile,1);
While Not Eof(InFile) Do
Begin
BlockRead(InFile,Buf,SizeOf(buf),NumRecsRead)
{读4k字节进缓冲区}
BlockWrite(OutFile,Buf,NumRecsRead)
{写4k字节进新文件}
end;
CloseFile(InFile);
CloseFile(OutFile);
end
Else
MessageDlg('Source file not exist.',mtError,[mbOk],0);
end;
 
filestream试一试吧!挺好用的!
 
看下面的CLICK
procedure TForm1.Button1Click(Sender: TObject);
var
s,t:TfileStream;
begin

S := TFileStream.Create( 'c:/boot.ini', fmOpenRead );
try
T := TFileStream.Create( 'c:/boot.in2',fmOpenWrite or fmCreate );
try
T.CopyFrom(S, S.Size)

finally
T.Free;
end;
finally
S.Free;

end;

end;
 
用ShellExecute()好
 
用api或TFileStream,效果都不错.
用Dos可能会出现长文件名不符合8.3的情况
用blockread/write也可以
 
接受答案了.
 
后退
顶部