SHFileOperation / SHFILEOPSTRUCT

我试图复制一个目录到一个新的位置。 所以我使用SHFileOperation / SHFILEOPSTRUCT如下:

SHFILEOPSTRUCT sf; memset(&sf,0,sizeof(sf)); sf.hwnd = 0; sf.wFunc = FO_COPY; dirName += "\\*.*"; sf.pFrom = dirName.c_str(); string copyDir = homeDir + "\\CopyDir"; sf.pTo = copyDir.c_str(); sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI; int n = SHFileOperation(&sf); if(n != 0) { int x = 0; } 

所以我设置了上面的值。 我在文件夹中创build了一个文件(我已经closures了句柄,所以应该可以移动)。 SHFileOperation调用返回2,但我无法find任何地方这些错误代码的解释。 有没有人知道我在哪里可以find2意味着什么,或者有没有人有任何想法,为什么它可能不工作? 干杯

Solutions Collecting From Web of "SHFileOperation / SHFILEOPSTRUCT"

错误代码2表示系统找不到指定的文件。

有关错误描述的完整列表,请参阅Windows系统错误代码 ,或者编写一个函数来获取错误代码的描述:

 std::string error_to_string(const DWORD a_error_code) { // Get the last windows error message. char msg_buf[1025] = { 0 }; // Get the error message for our os code. if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, a_error_code, 0, msg_buf, sizeof(msg_buf) - 1, 0)) { // Remove trailing newline character. char* nl_ptr = 0; if (0 != (nl_ptr = strchr(msg_buf, '\n'))) { *nl_ptr = '\0'; } if (0 != (nl_ptr = strchr(msg_buf, '\r'))) { *nl_ptr = '\0'; } return std::string(msg_buf); } return std::string("Failed to get error message"); } 

从阅读SHFileOperation的文档中,为pTopFrom指定的字符串必须是双空字符终止的:你的只是单空字符结束。 尝试以下操作:

 dirName.append(1, '\0'); sf.pFrom = dirName.c_str(); string copyDir = homeDir + "\\CopyDir"; copyDir.append(1, '\0'); sf.pTo = copyDir.c_str(); 

通过IFileOperation在Windows Vista中已经替换SHFileOperation函数。 那么使用SHFileOperation是否聪明? 或者代码只能在<vista上运行。

编辑:删除了一部分,我误解了你的问题的一部分。