3

几个小时以来,我一直在努力解决这个问题,它在 Windows Vista 和 Windows 7 上运行良好,但是当我在 Windows XP 上运行它时,它失败了,没有任何消息。不幸的是,我没有 XP 下的开发环境,所以我不能只通过调试器运行它来检查,我是否错过了一些非常明显的东西?同一段代码实际上确实使用 aCopyFile和几个命令来写出数据,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);`
4

2 回答 2

1

因此,出于某种奇怪的原因,使用SHFileOperation将强制 Windows XP(但不是 Vista 或 7)的确认对话框并忽略标志告诉它只是确认。在运行副本之前使用的简单修复,CreateDirectory()不需要确认对话框。

于 2013-03-06T16:37:11.617 回答
0

的文档SHFILEOPSTRUCT有这个警告:

毫不夸张地说,您的路径应该始终是完整路径。如果 pFrom 或 pTo 成员是非限定名称,则当前目录取自由 GetCurrentDirectory 和 SetCurrentDirectory 函数管理的全局当前驱动器和目录设置。

您的source规范是一个不合格的名称。

于 2013-03-06T15:57:25.850 回答