一种使用 boost 和 c++ 列出目录和子目录中所有文件的方法

A method to list all files in directory and sub-directories using boost and c++

本文关键字:子目录 方法 文件 一种 c++ boost      更新时间:2023-10-16

我有以下代码来搜索目录中的所有文件及其所有子目录。 该代码对嵌套子目录使用递归。

#include "boost/filesystem.hpp"
#include <iostream>
using namespace boost::filesystem;
void getDirectoryFiles(path p, vector<string> &files) {
    if (exists(p)) {
        if (is_regular_file(p)) {
            files.push_back(p.string());
            return;
        }
        else if (is_directory(p)) {
            for (directory_entry& x : directory_iterator(p)) {
                getDirectoryFiles(x.path(), files);
            }
        }
        else {
            cout << "exists, but not a file of a directory!n";
            return;
        }
    }
    else {
        cout << "Path not exists!";
        return;
    }
};

总体思路取自 Boost 文档,但有所转折。有人可以优化此代码吗?

有一个recursive_directory_iterator。

制作样品:

fs::path dir = ".";
fs::recursive_directory_iterator it(dir), end;
std::vector<std::string> files;
for (auto& entry : boost::make_iterator_range(it, end))
    if (is_regular(entry))
        files.push_back(entry.path().native());