std::experimental::filesystem::recursive_directory_iterator
来自 cppreference.com
< cpp | experimental | fs
定义在头文件 <experimental/filesystem> 中 |
||
class recursive_directory_iterator; |
(文件系统 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 循环支持 (函数) |
此外,operator==
和 operator!=
作为成员或非成员提供,如 LegacyInputIterator 所需。
[编辑] 注意
recursive_directory_iterator
通常保存一个引用计数的指针(满足 LegacyInputIterator 的浅拷贝语义)到一个实现对象,该对象保存
- 一个容器(如 std::vector)的非递归 directory_iterators,这些迭代器形成递归栈。
- 递归深度计数器(可以使用 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"
[编辑] 另请参见
目录内容的迭代器 (类) | |
目录项 (类) | |
迭代目录内容的选项 (枚举) |