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
|
[编辑] 成员函数
构造一个递归目录迭代器 (公共成员函数) | |
(析构函数) |
默认析构函数 (公共成员函数) |
观察器 | |
访问指向的条目 (公共成员函数) | |
返回当前影响迭代的活动选项 (公共成员函数) | |
返回当前的递归深度 (公共成员函数) | |
检查是否为当前目录禁用了递归 (公共成员函数) | |
修改器 | |
赋值内容 (公共成员函数) | |
前进到下一个条目 (公共成员函数) | |
将迭代器在目录层次结构中向上移动一级 (公共成员函数) | |
禁用递归,直到下一次递增 (公共成员函数) |
[编辑] 非成员函数
基于范围的 for 循环支持 (函数) |
此外,根据 LegacyInputIterator 的要求,还提供了 operator==
和 operator!=
,作为成员或非成员。
[编辑] 注解
recursive_directory_iterator
通常持有一个引用计数的指针(为了满足 LegacyInputIterator 的浅拷贝语义),指向一个实现对象,该对象持有
- 一个容器(例如 std::vector)的非递归 directory_iterator,它们构成了递归堆栈。
- 递归深度计数器(可以使用 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"
[编辑] 参见
目录内容的迭代器 (类) | |
一个目录条目 (类) | |
用于迭代目录内容的选项 (枚举) |