如何删除文件夹到回收站
-
12-09-2019 - |
题
我下C ++,MFC,窗户编程。
我要删除一个文件夹到回收站。 我怎样才能做到这一点?
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 \”
解决方案
这SHFileOperation的返回值是一个int,并应指定错误代码。您能得到什么?
其他提示
我知道这是不正确的做法,但如果你不能找到一个解决方案,你可以试试这个..
下载文件nircmd.exe或另一个EXE,它可以清空回收站。
则通过系统调用这些函数( “nircmd.exe emptybin”)
您已经找到一个可行的解决方案,但是它仅仅是偶然的。这里的实际问题是,pFrom
参数是一种特殊的格式。根据MSDN文档为 SHFILEOPTS 一>,它存储的文件路径列表,每一个空值终止,最后一个接一个额外空。
在您的情况下,这发生在工作,因为FromBuf
阵列比文件名更长,所有的条目初始化到零。更一般的解决方案是创建一个缓冲区足够长的文件名,然后后添加两个NULL字符。请注意,Windows文件名的可以的比_MAX_PATH
更长,例如看到的 https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation 一>
不隶属于 StackOverflow