windows C++删除所有文件和子文件夹,但保留目录本身

du7egjpx  于 2023-08-07  发布在  Windows
关注(0)|答案(3)|浏览(183)

我需要删除临时文件夹中的所有内容。我知道我可以使用filesystem::remove_allfilesystem::remove_all_dir,但这将意味着程序也将删除临时文件夹本身,这当然不是我想要的。我找不到C++的答案,所以如果你们能帮忙,那就太好了。
谢谢你,谢谢

whlutmcx

whlutmcx1#

std::filesystem::remove_all( path )将递归删除path * 和 * 处的文件夹,如果path引用的是文件而不是目录,则将删除该文件。
所以

void deleteDirectoryContents(const std::filesystem::path& dir)
{
    for (const auto& entry : std::filesystem::directory_iterator(dir)) 
        std::filesystem::remove_all(entry.path());
}

字符串

33qvvth1

33qvvth12#

如果可以使用std::filesystem,解决方案可能如下:

#include <filesystem>

namespace fs = std::filesystem;

void delete_dir_content(const fs::path& dir_path) {
    for (auto& path: fs::directory_iterator(dir_path)) {
        fs::remove_all(path);
    }
}

字符串

t1rydlwq

t1rydlwq3#

我知道这个主题是针对Windows的,但我在寻找Unix的解决方案时发现了它。所以这里是Unix运行C++ 11和标准库的解决方案。基于this anwser

#include <dirent.h>

bool cleanDirectory(const std::string &path){
    struct dirent *ent;
    DIR *dir = opendir(path.c_str());
    if (dir != NULL) {
        /* remove all the files and directories within directory */
        while ((ent = readdir(dir)) != NULL) {
            std::remove((path + ent->d_name).c_str());
        }
        closedir (dir);
    } else {
        /* could not open directory */
        return false;
    }
    return true;
}

字符串

相关问题