std::experimental::filesystem::recursive_directory_iterator
来自 cppreference.cn
< cpp | experimental | fs
定义于头文件 <experimental/filesystem> |
||
class recursive_directory_iterator; |
(filesystem TS) | |
recursive_directory_iterator
是一个 LegacyInputIterator,它迭代目录的 directory_entry 元素,并递归迭代所有子目录的条目。迭代顺序未指定,除了每个目录条目只访问一次。
默认情况下,不跟随符号链接,但这可以通过在构造时指定目录选项 follow_directory_symlink 来启用。
特殊路径名 dot 和 dot-dot 会被跳过。
如果 recursive_directory_iterator
超越顶层目录的最后一个目录条目,它将变得与默认构造的迭代器(也称为结束迭代器)相等。两个结束迭代器总是相等,解引用或递增结束迭代器是未定义行为。
如果在创建递归目录迭代器后,文件或目录被删除或添加到目录树中,则通过迭代器是否观察到此更改是未指定的。
如果目录结构包含循环,则可能无法到达结束迭代器。
目录 |
[编辑] 成员类型
成员类型 | 定义 |
value_type
|
filesystem::directory_entry
|
difference_type
|
std::ptrdiff_t
|
pointer
|
const filesystem::directory_entry*
|
reference
|
const filesystem::directory_entry&
|
iterator_category
|
std::input_iterator_tag
|
[编辑] 成员函数
构造一个递归目录迭代器 (public member function) | |
(析构函数) |
默认析构函数 (public member function) |
观察器 | |
访问指向的条目 (public member function) | |
返回当前活跃的影响迭代的选项 (public member function) | |
返回当前递归深度 (public member function) | |
检查当前目录是否禁用递归 (public member function) | |
修改器 | |
赋值内容 (public member function) | |
前进到下一个条目 (public member function) | |
在目录层次结构中将迭代器向上移动一级 (public member function) | |
禁用递归直到下一次递增 (public member function) |
[编辑] 非成员函数
支持基于范围的 for 循环 (function) |
此外,根据 LegacyInputIterator 的要求,提供了 operator==
和 operator!=
,作为成员函数或非成员函数。
[编辑] 注意
recursive_directory_iterator
通常持有一个引用计数的指针(以满足 LegacyInputIterator 的浅拷贝语义)到一个实现对象,该对象持有
- 一个非递归 directory_iterators 的容器(例如 std::vector),它构成了递归栈。
- 递归深度计数器(可通过 depth() 访问)。
- 构造时使用的目录选项(可通过 options() 访问)。
- 待定递归标志(可通过 recursion_pending() 访问,可与目录选项结合以节省空间)。
[编辑] 示例
运行此代码
#include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::create_directories("sandbox/a/b"); std::ofstream("sandbox/file1.txt"); fs::create_symlink("a", "sandbox/syma"); for (const fs::directory_entry& entry : fs::recursive_directory_iterator("sandbox")) std::cout << entry << '\n'; fs::remove_all("sandbox"); }
可能的输出
"sandbox/a" "sandbox/a/b" "sandbox/file1.txt" "sandbox/syma"
[编辑] 另请参见
指向目录内容的迭代器 (class) | |
目录项 (class) | |
迭代目录内容的选项 (enum) |