CFile ::删除,从目录中删除文件但该文件不可用

时间:2013-11-29 12:51:09

标签: c++ mfc

我有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);
}

提前致谢。

3 个答案:

答案 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分隔。