std::experimental::filesystem::recursive_directory_iterator

来自cppreference.com
< cpp‎ | experimental‎ | fs
 
 
实验性
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
实验性非 TS 功能特性
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
在标头 <experimental/filesystem> 定义
class recursive_directory_iterator;
(文件系统 TS)

recursive_directory_iterator 是一种老式输入迭代器 (LegacyInputIterator) ,它在某个目录的 directory_entry 元素上,以及递归地在其所有子目录的目录项上迭代。未指定迭代顺序,但每个目录项仅被访问一次。

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

特殊路径名 点点 被跳过。

如果 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) 的浅复制语义),该对象持有:

示例

#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"

参阅

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