2

我在 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);

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

我发现了问题:文件路径应该是:“c:\abc”而不是“c:\abc\”

4

3 回答 3

3

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

于 2009-08-10T10:44:17.480 回答
0

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

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

然后你通过 system("nircmd.exe emptybin") 调用这些函数

于 2009-08-10T10:48:46.830 回答
0

您找到了一个可行的解决方案,但这只是偶然。这里的实际问题是pFrom参数采用特殊格式。根据SHFILEOPTS的 MSDN 文档,它存储了一个文件路径列表,每个路径都以 null 结尾,最后一个之后有一个额外的 null。

在您的情况下,这恰好起作用,因为FromBuf数组比文件名长,并且所有条目都初始化为零。更通用的解决方案是创建一个足够长的缓冲区以容纳文件名,然后在其后添加两个 nul 字符。请注意,Windows 文件名可以长于_MAX_PATH,例如参见https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation

于 2019-03-26T11:51:24.333 回答