我在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 \”
SHFileOperation的返回值是一个int,应该指定错误代码。你得到了什么?
我知道这不是正确的方法,但如果你找不到解决方案,你可以尝试这个..
下载文件nircmd.exe或另一个可以清空回收站的exe。
然后你通过系统调用这些函数(“nircmd.exe emptybin”)
你找到了一个有效的解决方案,但这只是偶然的。这里的实际问题是pFrom
参数是一种特殊格式。根据SHFILEOPTS的MSDN文档,它存储了一个文件路径列表,每个路径以空值终止,并在最后一个之后加上一个空值。
在你的情况下,这恰好起作用,因为FromBuf
数组比文件名长,并且所有条目都初始化为零。更通用的解决方案是创建一个足够长的文件名缓冲区,然后在其后添加两个空字符。请注意,Windows文件名可能比_MAX_PATH
更长,例如,请参阅https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation