拷贝文件夹出错!!!!!!!!!!!!!!

lovefox_zoe 2009-07-18 02:15:08

Function CopyFileAndDir(SourceDir,DestDir:String;nLx:Integer):Boolean;
Var
Opstruc: TSHFileOpStruct;
frombuf,tobuf: Array[0..128] of Char;
begin

FillChar(frombuf,Sizeof(frombuf),0);
FillChar(tobuf,Sizeof(tobuf),0);
StrPcopy(frombuf,SourceDir);
Case nLx of
1:
StrPcopy(tobuf,DestDir);
end;
With Opstruc Do
Begin
Wnd:=0;
Case nLx of
1: wFunc:=FO_COPY;
2: wFunc:=FO_DELETE;
Else wFunc:=FO_COPY;
end;
pFrom:=@frombuf;
pTo:=@tobuf;
fFlags:=FOF_NOCONFIRMATION;
fAnyOperationsAborted:=False;
hNameMappings:=Nil;
lpszProgressTitle:=Nil;
end;
try
ShFileOperation(OpStruc);
Result:=True;
except
Result:=False;
end;
end;


CopyFileAndDir('f:\1\','f:\2',1);调用出错“无法复制 文件: 无法读源文件或磁盘。”

但调用CopyFileAndDir('f:\1','f:\2',1);却可以。没道理啊。平时写类似东西的时候,还特意注意如果路径结尾不是'\',还要补齐呢。

编程环境:WIN XP SP3 + DELPHI 2009 V.12.0.3420.21218
...全文
128 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovefox_zoe 2009-07-20
  • 打赏
  • 举报
回复
特别对于没有后缀名的文件,怎么拷贝????
youcunzai 2009-07-20
  • 打赏
  • 举报
回复
学习
bdmh 2009-07-20
  • 打赏
  • 举报
回复
使用api的拷贝功能,拷贝文件夹要加双结尾#0#0,文件加单结尾#0
lovefox_zoe 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dinoalex 的回复:]
那为什么要输\?
[/Quote]

如果不输入这个\,碰到无后缀的文件怎么拷贝,怎么区分是文件还是文件夹??

比如这个文件,C:\WINDOWS\system32\drivers\etc\hosts,如果用这个方法拷贝,会以为是文件夹的。啊
lovefox_zoe 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dinoalex 的回复:]
那为什么要输\?
[/Quote]

感觉以前如果操作文件夹,都要记得在路径后补充"\"。
dinoalex 2009-07-20
  • 打赏
  • 举报
回复
那为什么要输\?
lovefox_zoe 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bdmh 的回复:]
使用api的拷贝功能,拷贝文件夹要加双结尾#0#0,文件加单结尾#0
[/Quote]


Function CopyFileAndDir(FromDir,ToDir: string):boolean;
var
T:TSHFileOpStruct; //定义文件操作结构(其实就是一个Packed记录类型)
begin
With T do
Begin
//Wnd:=Fm_Create_Question.Handle ;
Wnd:=0;
wFunc:=FO_COPY; //执行复制操作
pFrom:=Pchar(FromDir+#0#0); //加#0
pTo:=pchar(ToDir+#0#0); //加#0
hNameMappings:=nil;
lpszProgressTitle:=nil;
fFlags:=FOF_NOCONFIRMATION;
End;
if SHFileOperation(T)=0 then //文件操作函数SHFileOperation操作成功返回0
result:=True
else
result:=False;
end;


我的函数改为这样了。但是CopyFileAndDir('f:\1\','f:\2');依然出错。可恨就可恨在这个"f:\1\"。如果不要这个最后的"\",写成"f:\1",调用正确。百思不得其解。还有补充一点,在
pFrom:=Pchar(FromDir); //不加#0
pTo:=pchar(ToDir); //不加#0
只要不把地址的最后的“\”写入,就不会错误。郁闷
lovefox_zoe 2009-07-19
  • 打赏
  • 举报
回复
用你这个语句,不是没用到BUF了?
Kvci 2009-07-19
  • 打赏
  • 举报
回复
错了
这样才对
pFrom:=pchar(SourceDir+#0#0);
pTo:=pchar(DestDir+#0#0);
Kvci 2009-07-19
  • 打赏
  • 举报
回复
pFrom:=@frombuf;
pTo:=@tobuf;
把这个改一下
pFrom:=pchar(frombuf+#0#0);
pTo:=pchar(tobuf+#0#0);

lovefox_zoe 2009-07-18
  • 打赏
  • 举报
回复
没人知道么?

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧