c++中递归列出目录及子目录中的所有文件

问题描述 投票:0回答:1

为什么

recursive_directory_iterator()
没有像据说的那样递归地列出所有子目录?

我已经创建了 C++ 入门书的解决方案,其中我有一个该书的主目录,其中包含每个部分的目录和一些文件。然后每个部分都有每个章节的目录,其中包含所有练习的解决方案。

我尝试分别在递归函数中使用

recursive_directory_iterator
directory_iterator
递归地列出所有文件和目录,但两者都列出了主目录中的相同文件和一些目录,但主目录中的所有目录。

例如main有part_1、part_2、part_3、part_4,它只列出part_3中的文件,而不列出其他part_*。我什至尝试传递 follow_directory_symlink,但仍然无法列出所有文件。我做错了什么。

它甚至递归地显示 Part_3 中的所有子目录。

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main() {
    fs::path curr("/c++_primer_github");   //  I didn't post the original path
    for( const auto &entry : fs::recursive_directory_iterator(curr, fs::directory_options::follow_directory_symlink)) {
        if (fs::is_directory(entry)) {
            std::cout << "[+]" << entry.path().filename() << std::endl; 
        } else if (fs::is_regular_file(entry)) {
            std::cout << entry.path().filename() << " " << entry.file_size() << std::endl;
        }
    }
    return 0;
}
c++ file c++17 symlink std-filesystem
1个回答
0
投票

代码工作得非常好,问题是因为我正在使用包含我的存储库文件的目录进行测试,它还有一个 git 文件夹,其中包含我相信由 git 创建的大量文件列表。所以当我在 VS Code 中测试这段代码时,它并没有在终端中显示整个输出,我只能滚动到一定程度,所以其他子目录没有列出,VS Code 终端中的 ctrl+f 目录名称来了没有结果,所以我之前很困惑,但后来我将输出打印到文件中。它包含预期的文件和子目录的完整列表。

© www.soinside.com 2019 - 2024. All rights reserved.