我有mfc应用程序,它会在点击按钮时删除文件,该文件将被删除,但它在回收站中不可用。我希望文件在回收站中可用。我怎么能这样做。
file.Remove((LPCTSTR)csFilePath.GetBuffer());
请帮帮我。
这是我在班上实施的代码。请告诉我我错了。 以下是更多详细信息的代码
void CUtility::DeleteSelectedFile(CString csFilePath)
{ // ensure double-null ending
TCHAR szBuffer[MAX_PATH + 2] = {0};
_tcscpy_s(szBuffer, _countof(szBuffer), (LPCTSTR)csFilePath.GetBuffer());
int nResult;
// set up struct
SHFILEOPSTRUCT pStruct;
pStruct.hwnd = NULL;
pStruct.wFunc = FO_DELETE;
pStruct.pFrom = szBuffer;
pStruct.pTo = NULL;
pStruct.fFlags = FOF_ALLOWUNDO | FOF_SILENT | FOF_NOERRORUI;
pStruct.fAnyOperationsAborted = false;
pStruct.hNameMappings = NULL;
pStruct.lpszProgressTitle = NULL;
// perform the delete
nResult = SHFileOperation(&pStruct);
}
提前致谢。
答案 0 :(得分:2)
不幸的是,MFC不提供对Recycled Bin的支持,所以正确的方法是使用WinAPI - > SHFileOperation函数,带有标志FOF_ALLOWUNDO。
示例代码:
#include <windows.h>
#include <shellapi.h>
SHFILEOPSTRUCT fo = {0};
fo.wFunc = FO_DELETE;
fo.pFrom = filename; // specify full path with doubled zero at the end (\0\0)
fo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_ALLOWUNDO;
if (SHFileOperation(&fo) == 0)
return true;
答案 1 :(得分:0)
这是在使用SHFileOperation并相应填充FILEOPSTRUCT参数时完成的。您必须使用FO_DELETE参数。
请参阅MSDN
答案 2 :(得分:0)
以下是使用SHFileOperation
的示例函数:
void CImageRectanglesDlg::DeleteToRecycle(const CString &szFilename)
{
// ensure double-null ending
TCHAR szBuffer[MAX_PATH + 2] = {0};
_tcscpy_s(szBuffer, _countof(szBuffer), szFilename);
// ensure double-null termination
int nLen = szFilename.GetLength();
szBuffer[nLen] = _T('\0');
szBuffer[nLen + 1] = _T('\0');
// set up struct
SHFILEOPSTRUCT pStruct;
pStruct.hwnd = NULL;
pStruct.wFunc = FO_DELETE;
pStruct.pFrom = szBuffer;
pStruct.pTo = NULL;
pStruct.fFlags = FOF_ALLOWUNDO | FOF_NO_UI;
pStruct.fAnyOperationsAborted = false;
pStruct.hNameMappings = NULL;
pStruct.lpszProgressTitle = NULL;
// perform the delete
int nRes = SHFileOperation(&pStruct);
ASSERT(!nRes);
}
请注意,您必须仔细构造结构的pFrom
成员,因为它实际上是路径名的列表,并且必须以双NULL结束。您可以在此缓冲区中提供多个路径名,每个路径名都用一个NULL分隔。