移动文件夹Windows C ++:Vista和更高版本,而不是XP

时间:2013-03-06 15:20:35

标签: c++ windows winapi

我一直在努力将这个问题做好几个小时,并且在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);`

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

SHFILEOPSTRUCT的文档有此警告:

  

您的路径应始终为完整路径,这一点不容小觑。如果pFrom或pTo成员是非限定名称,则当前目录将取自GetCurrentDirectory和SetCurrentDirectory函数管理的全局当前驱动器和目录设置。

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