如何使用 C++17 filesystem 库递归列出目录

注意: 要了解如何非递归列出目录,只需将 recursive_directory_iterator 替换为 directory_iterator,或参见我们的完整文章如何使用 C++17 filesystem 库列出目录

要使用 C++17 filesystem 库 递归列出目录,使用此代码片段:

recursive_list_example.cpp
#include <experimental/filesystem>

using namespace std::experimental::filesystem;

for(const directory_entry& entry : recursive_directory_iterator("my-directory")) {
    const auto& path = entry.path();
    // ...
}

完整示例:

recursive_list_full.cpp
#include <iostream>
#include <string>
#include <experimental/filesystem>

using namespace std;
using namespace std::experimental::filesystem;

int main() {
    for(const directory_entry& entry : recursive_directory_iterator("my-directory")) {
        // 是文件 / 目录吗?
        bool isNormalFile = is_regular_file(entry);
        bool isDirectory = is_directory(entry);

        auto path = entry.path();
        // 路径:my-directory/test.txt
        string pathString = path.string();

        // 文件名:test.txt
        string filenameString = path.filename().string();

        // 扩展名:txt
        string extensionString = path.extension().string();

        // 注意:你也可以直接 "cout << path"
    }
}

像这样编译:

build_filesystem_example.sh
g++ -o filesystem-example filesystem-example.cpp -lstdc++fs

对于此目录:

test-directory-structure.txt
my-directory
├── subdirectory
│   └── subdir-test.txt
└── test.txt

这将列出 subdirectorysubdirectory/subdir-test.txttest.txt


Check out similar posts by category: C/C++