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;
}

代码解释

这段代码首先通过 FindFirstFileWFindNextFileW 遍历指定目录下的所有文件和子目录,对于每个子目录,递归调用 DeleteDirContents 函数删除其所有内容,然后再删除该子目录本身;对于每个文件,直接删除。最后,删除根目录本身。

  1. DeleteDirContents 函数
    • 该函数接受一个 wstring 类型的参数,表示要删除的目录路径。
    • 它使用 FindFirstFileWFindNextFileW 函数遍历目录下的所有文件和子目录。
    • 对于每个子目录,递归调用自身函数来删除子目录的内容。
    • 对于每个文件,使用 DeleteFileW 函数删除文件。
  2. main 函数
    • 设置要删除的目录路径。
    • 调用 DeleteDirContents 函数删除目录内容。
    • 调用 RemoveDirectoryW 函数删除目录本身。

总结

本文提供的代码示例展示了如何使用 C++ 中的 FindFirstFileW, DeleteFileWRemoveDirectoryW 函数递归删除目录及其所有内容。该方法适用于需要删除整个目录结构的场景。

C++ 使用 FindFirstFileW, DeleteFileW, RemoveDirectoryW 递归删除目录及所有内容

原文地址: http://www.cveoy.top/t/topic/nnIS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录