CppDS.com

C++ 98 11 14 17 20 手册

std::filesystem::recursive_directory_iterator

来自cppreference.com
 
 
 
 
定义于头文件 <filesystem>
class recursive_directory_iterator;
(C++17 起)

recursive_directory_iterator 是在目录的 directory_entry 元素上,及递归地在所有子目录的目录条目上迭代的遗留输入迭代器 (LegacyInputIterator) 。迭代顺序是未指定的,除了只造访一次每个目录条目。

默认不跟随符号链接,但这可以通过在构造时指定目录选项 follow_directory_symlink 启用。

跳过特殊路径名 dotdot-dot

recursive_directory_iterator 被前移越过了顶层目录的最终目录迭代器,则它变得等于默认构造的迭代器,亦称作尾迭代器。两个尾迭代器始终相等,解引用或自增尾迭代器是未定义行为。

若在递归目录迭代器创建后,文件或目录被删除或添加到目录树,则更改是否会通过迭代器观察到是未指定的。

若目录结构含有环,则可能无法抵达尾迭代器。

成员类型

 
成员类型 定义
value_type std::filesystem::directory_entry
difference_type std::ptrdiff_t
pointer const std::filesystem::directory_entry*
reference const std::filesystem::directory_entry&
iterator_category std::input_iterator_tag

成员函数

构造递归目录迭代器
(公开成员函数)
(析构函数)
默认析构函数
(公开成员函数)
观察器
访问所指的目录条目
(公开成员函数)
返回影响迭代的当前活跃选项
(公开成员函数)
返回当前递归深度
(公开成员函数)
检查对当前目录是否禁用递归
(公开成员函数)
修改器
对内容赋值
(公开成员函数)
前移到下个目录条目
(公开成员函数)
在目录层级中将迭代器上移一层
(公开成员函数)
在下次自增前禁用递归
(公开成员函数)

非成员函数

基于范围的 for 循环支持
(函数)

另外,按遗留输入迭代器 (LegacyInputIterator) 要求,提供 operator==operator!= 为成员或非成员函数。

注意

recursive_directory_iterator 通常保有指向实现对象的引用计数指针(以满足遗留输入迭代器 (LegacyInputIterator) 的浅复制语义),该对象保有:

示例

#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
 
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for(auto& p: fs::recursive_directory_iterator("sandbox"))
        std::cout << p.path() << '\n';
    fs::remove_all("sandbox");
}

可能的输出:

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

参阅

指向目录内容的迭代器
(类)
目录条目
(类)
用于迭代目录内容的选项
(枚举)
关闭