我正在尝试使用SHFileOperation将文件从一个位置复制到另一位置:

SHFILEOPSTRUCT fileop;
fileop.hwnd = 0;
fileop.wFunc = FO_COPY;
fileop.pFrom = L"C:\\SomeDirectory\\SomeName.jpg\0";
fileop.pTo = L"C:\\SomeOtherDirectory\\SomeName.jpg\0";
fileop.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT;
fileop.fAnyOperationsAborted = FALSE;
fileop.hNameMappings = 0;
fileop.lpszProgressTitle = 0;
SHFileOperation(&fileop);

问题在于,不是在SomeOtherDirectory中获得SomeName.jpg的副本,而是创建了名为SomeOtherDirectory \ SomeName.jpg的空目录,这有什么线索吗?

最佳答案

对于FO_COPYFO_MOVE操作,pToSHFILEOPSTRUCT成员必须是位置,即目录,而不是目标文件名。该目录不存在,在这种情况下,即使它看起来像文件名,也会被创建。

您应该只指定"C:\\SomeOtherDiretory\0"或使用FO_RENAME

至于为什么不创建文件,您是否检查了返回值?

关于c++ - SHFileOperation创建空目录而不是文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3491499/

10-11 23:08