我一直在努力将这个问题做好几个小时,并且在Windows Vista和Windows上完全 。 Windows 7,但是当我在Windows XP上运行它时它没有任何消息就失败了。不幸的是我没有XP下的开发环境,所以我不能通过调试器运行它来检查,我是否错过了一些令人眼花缭乱的事情?实际上,同一段代码确实使用CopyFile
和一些命令将数据写入C:\
,因此如果它是权限错误则是奇怪的。
编辑:返回值为1223,ERROR_CANCELLED
表示已被用户取消。
编辑2:我禁用了s.fFlags并立即弹出一个对话框询问是否应该创建dir-test
文件夹,所以我切换到FOF_NOCONFIRMATION
并且它似乎忽略了该标志。我也使用相同的SHFileOperation
方法在删除期间使用它,因此它不适用于文件副本。
LPTSTR source = L"dir-test\\*\0";
LPTSTR dest = L"C:\\dir-test\0";
SHFILEOPSTRUCT s = { 0 };
s.hwnd = 0;
s.wFunc = FO_COPY;
s.fFlags = FOF_SILENT;
s.pTo = dest;
s.pFrom = source;
int n;
n = SHFileOperation(&s);`
答案 0 :(得分:1)
因此有一个奇怪的原因,使用SHFileOperation
将强制Windows XP的确认对话框(但不是Vista或7)并忽略标志告诉它只是确认。在运行副本之前使用CreateDirectory()
的简单修复,不需要确认对话框。
答案 1 :(得分:0)
SHFILEOPSTRUCT
的文档有此警告:
您的路径应始终为完整路径,这一点不容小觑。如果pFrom或pTo成员是非限定名称,则当前目录将取自GetCurrentDirectory和SetCurrentDirectory函数管理的全局当前驱动器和目录设置。
您的source
规范是不合格的名称。