Namespaces
Variants

std::experimental::filesystem:: recursive_directory_iterator

From cppreference.net
定义于头文件 <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

成员函数

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

非成员函数

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

此外,根据 LegacyInputIterator 的要求,提供了 operator== operator!= ,它们可以是成员函数或非成员函数。

备注

一个 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"

参见

目录内容的迭代器
(类)
目录项
(类)
目录内容迭代选项
(枚举)