如何将文件夹删除到回收站

时间:2009-08-10 10:41:01

标签: c++ windows directory recycle-bin

我在C ++,MFC,windows下编程。

我想将文件夹删除到回收站。 我怎么能这样做?

    CString filePath = directorytoBeDeletePath;
    TCHAR ToBuf[MAX_PATH + 10];
    TCHAR FromBuf[MAX_PATH + 10];
    ZeroMemory(ToBuf, sizeof(ToBuf));
    ZeroMemory(FromBuf, sizeof(FromBuf));

    lstrcpy(FromBuf, filePath);

    SHFILEOPSTRUCT FileOp;
    FileOp.hwnd = NULL
    FileOp.wFunc=FO_DELETE; 
    FileOp.pFrom=FromBuf;
    FileOp.pTo = NULL;
    FileOp.fFlags=FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
    FileOp.hNameMappings=NULL;
    bRet=SHFileOperation(&FileOp);

上面的代码有什么问题吗? 它总是失败。

我发现了问题: filePath应该是:“c:\ abc”而不是“c:\ abc \”

3 个答案:

答案 0 :(得分:3)

SHFileOperation的返回值是一个int,应该指定错误代码。你得到了什么?

答案 1 :(得分:0)

我知道这不是正确的方法,但如果你找不到解决方案,你可以试试这个......

下载文件nircmd.exe或其他可以清空回收站的exe文件。

然后你通过系统调用这些函数(“nircmd.exe emptybin”)

答案 2 :(得分:0)

您已经找到了可行的解决方案,但这只是偶然。这里的实际问题是pFrom参数的格式特殊。根据{{​​3}}的MSDN文档,它存储了一系列文件路径,每个路径都以空值终止,并在最后一个路径之后附加一个空值。

在您的情况下,这是可行的,因为FromBuf数组比文件名长,并且所有条目都初始化为零。更通用的解决方案是创建一个足以容纳文件名的缓冲区,然后在其后添加两个nul字符。请注意,Windows文件名 可以比_MAX_PATH长,例如,请参见SHFILEOPTS