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

CFile::Remove, removed a file from directory but the file is not available

本文关键字:文件 一个 Remove CFile 删除      更新时间:2023-10-16

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

提前谢谢。

不幸的是,MFC不支持Recycled Bin,因此正确的方法是使用带有标志FOF_ALLOWUNDO的WinAPI-->SHFileOperation函数。

样本代码:

#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 ()
fo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_ALLOWUNDO;
if (SHFileOperation(&fo) == 0)
  return true;

下面是一个使用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('');
    szBuffer[nLen + 1] = _T('');
    // 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分隔。

这是通过使用SHFileOperation并相应地填充FILEOPSTRUCT参数来完成的。必须使用FO_DELETE参数。

请参阅MSDN