SHFileOperation函数总是出错。

bigtree21cn 2005-06-09 04:09:34
我把当前工作目录下的一个文件夹copy到一个目的文件夹,执行到SHFileOperation时,总是提示
"无法复制文件:无法读取源文件或磁盘"。 SHFileOperation返回1026。
我的SHFileOperation操作是在以外一个dll中进行的。
我开始以为是文件夹被独占了,但我把这个程序开启,用一个测试程序,
copy同样的文件到同样的目的地则可以成功。


dll中的代码为:

SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = NULL;
op.wFunc = FO_COPY;
op.pFrom = strFrom;
op.pTo = m_path.c_str();
op.fFlags= FOF_SIMPLEPROGRESS | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
return SHFileOperation( &op); // 出错
...全文
791 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2005-06-09
  • 打赏
  • 举报
回复
是不是里的pFrom和pTo的数据是dll导入或者传出的。在路径后加上\0\0后试
"c:\\temp\0\0";
  • 打赏
  • 举报
回复
所以,上面的程序,无论是源程序和目标程序其实都有问题,当初我也遇到过,花了好大力气才找出错误原因。
  • 打赏
  • 举报
回复
一个细节问题:ShFileOperation中的pFrom和pTo中可以包含多个文件名,文件名之间用 '\0' 分割,最后以两个\0结束。

在你的测试程序中pFrom和pTo中,字符串后面跟的不只一个\0,所以成功,但你Dll中的代码估计就不会这样了,在正确的的文件名后面跟的可能是一些乱七八糟的东东,所以,不成功的原因很可能在此。
bigtree21cn 2005-06-09
  • 打赏
  • 举报
回复
pFrom和pTo没问题,同样的值在测试程序中都可以运行
idAnts 2005-06-09
  • 打赏
  • 举报
回复
我把你的代码改成这样:
SHFILEOPSTRUCT op;
ZeroMemory(&op, sizeof(op));
op.hwnd = NULL;
op.wFunc = FO_COPY;
op.pFrom = "C:\\s.dll";
op.pTo = "D:\\s.dll";
op.fFlags= FOF_SIMPLEPROGRESS | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
SHFileOperation( &op);

没有问题啊!看看你的pFrom和pTo有没有问题。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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