C++ 使用 FindFirstFileW, DeleteFileW, RemoveDirectoryW 递归删除目录及所有内容
C++ 使用 FindFirstFileW, DeleteFileW, RemoveDirectoryW 递归删除目录及所有内容
本文提供一个使用 C++ 代码示例,使用 FindFirstFileW, DeleteFileW, RemoveDirectoryW 函数递归删除指定目录及其所有子目录和文件。代码详细解释了递归遍历目录结构并删除文件和子目录的过程。
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
void DeleteDirContents(const wstring& dirPath)
{
wstring searchPath = dirPath + L"\*.*";
WIN32_FIND_DATAW findData;
HANDLE hFind = FindFirstFileW(searchPath.c_str(), &findData);
if (hFind == INVALID_HANDLE_VALUE)
{
return;
}
do
{
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (wcscmp(findData.cFileName, L".") != 0 && wcscmp(findData.cFileName, L"..") != 0)
{
wstring subDirPath = dirPath + L"\" + findData.cFileName;
DeleteDirContents(subDirPath);
RemoveDirectoryW(subDirPath.c_str());
}
}
else
{
wstring filePath = dirPath + L"\" + findData.cFileName;
DeleteFileW(filePath.c_str());
}
} while (FindNextFileW(hFind, &findData));
FindClose(hFind);
}
int main()
{
wstring dirPath = L"C:\\test";
DeleteDirContents(dirPath);
RemoveDirectoryW(dirPath.c_str());
return 0;
}
代码解释
这段代码首先通过 FindFirstFileW 和 FindNextFileW 遍历指定目录下的所有文件和子目录,对于每个子目录,递归调用 DeleteDirContents 函数删除其所有内容,然后再删除该子目录本身;对于每个文件,直接删除。最后,删除根目录本身。
DeleteDirContents函数- 该函数接受一个
wstring类型的参数,表示要删除的目录路径。 - 它使用
FindFirstFileW和FindNextFileW函数遍历目录下的所有文件和子目录。 - 对于每个子目录,递归调用自身函数来删除子目录的内容。
- 对于每个文件,使用
DeleteFileW函数删除文件。
- 该函数接受一个
main函数- 设置要删除的目录路径。
- 调用
DeleteDirContents函数删除目录内容。 - 调用
RemoveDirectoryW函数删除目录本身。
总结
本文提供的代码示例展示了如何使用 C++ 中的 FindFirstFileW, DeleteFileW 和 RemoveDirectoryW 函数递归删除目录及其所有内容。该方法适用于需要删除整个目录结构的场景。
原文地址: http://www.cveoy.top/t/topic/nnIS 著作权归作者所有。请勿转载和采集!