我在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 \”
答案 0 :(得分:3)
SHFileOperation的返回值是一个int,应该指定错误代码。你得到了什么?
答案 1 :(得分:0)
我知道这不是正确的方法,但如果你找不到解决方案,你可以试试这个......
下载文件nircmd.exe或其他可以清空回收站的exe文件。
然后你通过系统调用这些函数(“nircmd.exe emptybin”)
答案 2 :(得分:0)
您已经找到了可行的解决方案,但这只是偶然。这里的实际问题是pFrom
参数的格式特殊。根据{{3}}的MSDN文档,它存储了一系列文件路径,每个路径都以空值终止,并在最后一个路径之后附加一个空值。
在您的情况下,这是可行的,因为FromBuf
数组比文件名长,并且所有条目都初始化为零。更通用的解决方案是创建一个足以容纳文件名的缓冲区,然后在其后添加两个nul字符。请注意,Windows文件名 可以比_MAX_PATH
长,例如,请参见SHFILEOPTS