CFile::Remove,从目录中删除了一个文件,但该文件不可用
CFile::Remove, removed a file from directory but the file is not available
我有一个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
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 挂起和取消挂起一个文件DLL
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何打开并写入一个名称取自C++中字符串的文件
- 构建一个由C和C++文件组成的库
- c++多进程编写一个唯一的文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何将class.cpp和class.hpp编译为一个.o文件
- 写入文件会产生一个空文件或根本没有文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
- 在C++中一次读取一个文件一个int
- 输入/输出文件(一个字母的大写)
- 如何使用两个预编译的头文件.一个用于托管代码,另一个用于非托管代码.xxx.PCH不是一个有效的预编译头文件