std::filesystem::recursive_directory_iterator

来自cppreference.com
 
 
 
 
定义于头文件 <filesystem>
class recursive_directory_iterator;
(C++17 起)

recursive_directory_iterator 是在目录的 directory_entry 元素上,及递归地在所有子目录的目录条目上迭代的遗留输入迭代器 (LegacyInputIterator) 。迭代顺序是未指定的,除了只造访一次每个目录条目。

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

跳过特殊路径名 dotdot-dot

recursive_directory_iterator 被前移越过了顶层目录的最终目录迭代器,则它变得等于默认构造的迭代器,亦称作尾迭代器。两个尾迭代器始终相等,解引用或自增尾迭代器是未定义行为。

若在递归目录迭代器创建后,文件或目录被删除或添加到目录树,则更改是否会通过迭代器观察到是未指定的。

若目录结构含有环,则可能无法抵达尾迭代器。

目录

[编辑] 成员类型

 
成员类型 定义
value_type std::filesystem::directory_entry
difference_type std::ptrdiff_t
pointer const std::filesystem::directory_entry*
reference const std::filesystem::directory_entry&
iterator_category std::input_iterator_tag

[编辑] 成员函数

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

[编辑] 非成员函数

基于范围的 for 循环支持
(函数) [编辑]

另外,按遗留输入迭代器 (LegacyInputIterator) 要求,提供 operator==operator!= 为成员或非成员函数。

[编辑] 注意

recursive_directory_iterator 通常保有指向实现对象的引用计数指针(以满足遗留输入迭代器 (LegacyInputIterator) 的浅复制语义),该对象保有:

[编辑] 示例

#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
 
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for(auto& p: fs::recursive_directory_iterator("sandbox"))
        std::cout << p.path() << '\n';
    fs::remove_all("sandbox");
}

可能的输出:

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

[编辑] 参阅

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