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

Posted

技术标签:

【中文标题】C++ 删除所有文件和子文件夹,但保留目录本身【英文标题】:C++ Delete all files and subfolders but keep the directory itself 【发布时间】:2019-11-27 19:59:54 【问题描述】:

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

谢谢!

【问题讨论】:

使用directory_iterator并自己删除内容(在文件夹的每个成员上调用remove_all),或删除整个内容然后重新创建文件夹。 【参考方案1】:

std::filesystem::remove_all( path ) 将递归删除path 处的文件夹并且如果path 指的是文件而不是目录,它将删除该文件。

所以

void deleteDirectoryContents(const std::string& dir_path)

    for (const auto& entry : std::filesystem::directory_iterator(dir_path)) 
        std::filesystem::remove_all(entry.path());

【讨论】:

【参考方案2】:

如果您可以使用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);
    


【讨论】:

以上是关于C++ 删除所有文件和子文件夹,但保留目录本身的主要内容,如果未能解决你的问题,请参考以下文章

linux面试题:删除一个目录下的所有文件,但保留一个指定文件

递归方法删除文件夹(包含所有文件和子文件)

C++小技巧

shell脚本只保留最新的两个tar文件,但删除所有其他tar文件? [复制]

如何删除所有文件但保持目录结构不变? [复制]

删除文件但不删除文件夹 C#