std::filesystem::directory_iterator
来自cppreference.com
< cpp | filesystem
定义于头文件 <filesystem>
|
||
class directory_iterator; |
(C++17 起) | |
directory_iterator
是一个迭代于目录的 directory_entry 元素上的输入迭代器 (InputIterator
) (但不造访子目录)。迭代顺序是未指定的,除了每个目录入口只被造访一次。跳过特殊路径名 dot 和 dot-dot 。
若 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 |
[编辑] 成员函数
构造 directory_iterator (公开成员函数) | |
(析构函数) |
默认析构函数 (公开成员函数) |
对内容赋值 (公开成员函数) | |
访问所指的入口 (公开成员函数) | |
前进到下个入口 (公开成员函数) |
[编辑] 非成员函数
基于范围的 for 循环支持 (函数) |
另外,提供 operator==
和 operator!=
为成员或非成员函数,如输入迭代器 (InputIterator
) 所要求。
[编辑] 注意
许多遍历目录的低层 OS API 与下个目录入口一并获取文件属性。若它们存在,则 directory_iterator
的构造函数和非 const 函数将这些属性存储于所指向的 directory_entry 中,而不调用 directory_entry::refresh 。这使得程序能够在迭代目录入口的同时检验其属性,而不进行额外的系统调用。
[编辑] 示例
运行此代码
#include <fstream> #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::create_directories("sandbox/a/b"); std::ofstream("sandbox/file1.txt"); std::ofstream("sandbox/file2.txt"); for(auto& p: fs::directory_iterator("sandbox")) std::cout << p << '\n'; fs::remove_all("sandbox"); }
可能的输出:
"sandbox/a" "sandbox/file1.txt" "sandbox/file2.txt"
[编辑] 参阅
(C++17) |
指向一个目录及其子目录内容的迭代器 (类) |
(C++17) |
迭代目录内容的选项 (枚举) |
(C++17) |
目录入口 (类) |