关于整个目录copy文件的问题,本人百思不得要领,请大虾指点迷津!(100分)

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

zrj

Unregistered / Unconfirmed
GUEST, unregistred user!
如下程序中有backup和restore两个单选钮,speedbutton1(确定),button2(退出);
procedure Tbackup.SpeedButton1Click(Sender: TObject);
var path:string;
oldcursor:Tcursor;
FData:TShFileOpStruct;
begin
if Edit.text='' then
begin
showmessage('请输入要备份到的目录');
exit
end;
path:=ExtractFilePath(Application.Exename);
path:=path+'data';
oldcursor:=screen.Cursor;
if backup.Checked then
begin
if not DirectoryExists(edit.text) then
begin
if Application.messagebox('目录不存在,是不是要重新创建?','目录不存在',mb_okcancel+mb_iconquestion)=idok then
begin
mkdir(edit.text);
screen.Cursor:=crhourglass;
Fdata.pFrom := PChar(path);
fdata.pTo := PChar(edit.text);
fdata.wFunc := FO_COPY
FData.Wnd := Application.Handle
fData.lpszProgressTitle := 'Wait';
fData.fFlags := FOF_ALLOWUNDO OR FOF_NOCONFIRMMKDIR
OR FOF_NOCONFIRMATION
OR FOF_SILENT
ShFileOperation( FData );
screen.Cursor:=oldcursor;
end;
end
else
begin
if Application.messagebox('该目录下面的文件要被完全覆盖掉,要继续吗?','警告:',mb_okcancel+mb_iconquestion)=idok then
begin
screen.Cursor:=crhourglass;
Fdata.pFrom := PChar(path);
fdata.pTo := PChar(edit.text);

fdata.wFunc := FO_COPY
FData.Wnd := Application.Handle
fData.lpszProgressTitle := 'Wait';
fData.fFlags := FOF_ALLOWUNDO OR FOF_NOCONFIRMMKDIR
OR FOF_NOCONFIRMATION
OR FOF_SILENT
ShFileOperation( FData );
screen.Cursor:=oldcursor;
end;
end;
end;
if restore.Checked then
begin
if not DirectoryExists(edit.text) then
begin
messagedlg('你输入的目录不存在啊!',mtError,[mbYes],0);
exit
end
else
begin

screen.Cursor:=crhourglass;
Fdata.pFrom := PChar(edit.text);
fdata.pTo := PChar(path);
fdata.wFunc := FO_COPY
FData.Wnd := Application.Handle
fData.lpszProgressTitle := 'Wait';
fData.fFlags := FOF_ALLOWUNDO OR FOF_NOCONFIRMMKDIR
OR FOF_NOCONFIRMATION
OR FOF_SILENT
ShFileOperation( FData );
screen.Cursor:=oldcursor;
end
end;
end;
这断代码,有时候通过,有时候就提示不能copy文件,最常见是没有创建目录是,备份文件
可以,而目录存在是就提示出错,反正错得奇怪,我是copy来得代码,对整个目录copy不太
懂,请大家指点..
 
各位说话啊,是不是这个代码太长了??!
 
这段代码能拷贝目录下的所有文件吗?
我有些过拷贝目录下所有exe文件的代码,你可以参考一下
procedure TMain.oxButton3Click(Sender: TObject);
begin
if flatedit1.Text<>'' then
if flatedit2.Text<>'' then
begin
try
CopyFileMethod;
messagedlg('文件拷贝完成。',mtinformation,[mbok],0);
except
screen.Cursor:=crdefault;
messagedlg('文件拷贝失败,也许是拷贝前还有些需要覆盖的应用程序没有退出。',mtinformation,[mbok],0);
end;
end
else
begin
messagedlg('目标路径不能为空。',mtwarning,[mbok],0);
flatedit2.SetFocus;
end
else
begin
messagedlg('源文件路径不能为空。',mtwarning,[mbok],0);
flatedit1.SetFocus;
end;
end;

procedure TMain.CopyFileMethod;
var
FSearchRec,DSearchRec:TSearchRec;
FindResult:integer;
f:file of byte;
begin
screen.Cursor:=crhourglass;
findresult:=findfirst(flatedit1.text+'*.exe',faanyfile,fsearchrec);
try
while findresult=0 do
begin
copyfile(pchar(flatedit1.Text+fsearchrec.Name),
pchar(flatedit2.Text+fsearchrec.Name),false);//拷贝文件的语句,false参数表示覆盖
assignfile(f,Apath+fsearchrec.Name);
Reset(f);
closefile(f);
findresult:=findnext(fsearchrec)//查找下一个符合条件的文件
end;
findresult:=findfirst(apath+'*.exe',fadirectory,dsearchrec);
while findresult=0 do
findresult:=findnext(dsearchrec);
finally
findclose(fsearchrec);
end;
screen.Cursor:=crdefault;
end;
 
呵呵,就是你的参数设置不对了。
Fdata.pFrom := PChar(edit.text);
fdata.pTo := PChar(path);
需要双#0#0结尾的。你没有看帮助吗?
Fdata.pFrom := PChar(edit.text+#0);
fdata.pTo := PChar(path+#0);
 
to terry_lzs:
谢谢老兄多次援手哦,毕业设计搞定请你吃饭,呵呵!
 
后退
顶部