MFC直接删除目录,不递归
时间: 2024-10-13 13:04:01 浏览: 25
MFC(Microsoft Foundation Classes),是微软为其Windows应用程序提供的C++编程框架的一部分。如果你想在MFC应用中直接删除目录而不进行递归删除,可以使用CFile类的Delete函数配合SHGetFolderPath等API。下面是一个简单的示例:
```cpp
#include "atlbase.h"
#include <shlobj.h>
void DeleteDirectoryRecursively(LPCTSTR lpPath)
{
// 检查路径是否存在
if (!PathExists(lpPath))
return;
// 获取文件系统信息
IShellFolder* pShellFolder = NULL;
HRESULT hr = SHGetDesktopFolder(&pShellFolder);
if (SUCCEEDED(hr)) {
CSimpleIDList idlItems;
CoMarshalInterface(idlItems.pidlEmpty, IID_IShellFolder, (LPVOID)pShellFolder);
// 打开目录
IFolderView folderView;
hr = pShellFolder->BindToObject(idlItems, NULL, IID_IFolderView, &folderView);
if (SUCCEEDED(hr)) {
ITEMIDLIST itemid = {0};
hr = folderView.GetFirstItem(&itemid);
while (SUCCEEDED(hr) && !idlItems.IsEqual(itemid)) {
// 获取子项路径
TCHAR szSubItem[MAX_PATH];
hr = folderView.GetDisplayNameOf(itemid, SDISPLAYNAME_NORMAL, szSubItem, ARRAYSIZE(szSubItem));
if (SUCCEEDED(hr) && _tcsicmp(szSubItem, _T(".")) != 0 && _tcsicmp(szSubItem, _T("..")) != 0) {
DeleteDirectoryRecursively(szSubItem); // 递归删除子目录
}
hr = folderView.GetNextItem(itemid, PRINTER_ENUM_N下一页);
}
folderView.Release();
}
// 关闭并释放接口
if (pShellFolder)
pShellFolder->Release();
// 删除当前目录
if (SUCCEEDED(CoUnmarshalInterface(idlItems.pidlEmpty, IID_IShellFolder, (LPVOID*)NULL)))
CoTaskMemFree(idlItems.pidlEmpty);
} else {
// 处理失败情况
AtlMessageBox(NULL, TEXT("Failed to get desktop folder"), TEXT("Error"), MB_OK | MB_ICONERROR);
}
}
// 调用函数并传入待删除的目录路径
DeleteDirectoryRecursively(_T("C:\\Temp\\YourDirectoryHere"));
```
这个函数首先检查目录是否存在,然后获取该目录下的所有子项,并递归地删除它们,最后删除根目录。
阅读全文