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

问题描述 投票:2回答:3

我在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 \”

c++ windows directory recycle-bin
3个回答
3
投票

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


0
投票

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

下载文件nircmd.exe或另一个可以清空回收站的exe。

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


0
投票

你找到了一个有效的解决方案,但这只是偶然的。这里的实际问题是pFrom参数是一种特殊格式。根据SHFILEOPTS的MSDN文档,它存储了一个文件路径列表,每个路径以空值终止,并在最后一个之后加上一个空值。

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

© www.soinside.com 2019 - 2024. All rights reserved.