将目录移动到回收站/废纸篓

时间:2015-11-18 22:53:14

标签: c++ recycle-bin

ALL,

我试图将文件或目录移动到回收站/垃圾箱。

这是我的代码:

SHFILEOPSTRUCT fileOp;
memset( fileOp, 0, sizeof( SHFILEOPSTRUCT ) );
fileOp.hwnd = NULL;
fileOp.wFunc = FO_DELETE;
wxString temp = fileName + '\0';
fileOp.pFrom = temp.c_str();
fileOp.pTo = NULL;
fileOp.fFlags = FOF_ALLOWUNDO | FOF_NOERRORUI | FOF_NOCONFIRMATION | FOF_SILENT;
int res = SHFileOperation( &fileOp );
if( res != 0 )
    printf( _ ( "Failed to move file '%s' to Recycle Bin" ), fileName.c_str() );
else
    result = true;

fileName变量的值为" C:\ temp \ testfolder"和#34; testfolder"其中有1个文件。

执行时,SHFileOperation()不返回0,但是给出124,根据MSDN,"源或目标中的路径或两者都无效。"。

现在的问题是:这是否意味着我无法将非空文件夹放入回收站/垃圾箱?如果答案是肯定的 - 修改代码以解释它的最简单方法是什么?或者可能有不同的API调用?

谢谢。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,其中SHFileOperation返回2(ERROR_FILE_NOT_FOUND)。

检查了文档(请参阅https://docs.microsoft.com/en-gb/windows/desktop/api/shellapi/ns-shellapi-_shfileopstructa)后,似乎出现的问题是pFrom参数实际上代表了文件名列表,每个文件名都以空值终止,但是最终文件名以额外的null。因此,我希望您需要更改此行:

wxString temp = fileName + '\0' + '\0'; // double terminated