描述一个输入迭代器,它对目录中的文件名进行排序,可能以递归方式降序到子目录。 对于迭代器 X,表达式 *X 的计算结果为一个 directory_entry 类的对象,它包装了文件名及与其状态有关的任何信息。
有关详细信息和代码示例,请参阅文件系统导航 (C++)。
语法
class recursive_directory_iterator;
备注
类模板存储以下对象:
stack<pair<directory_iterator, path>>类型的对象(此处出于阐述目的称为mystack),它表示待排序的一套目录directory_entry类型的对象(此处称为myentry),它表示目录序列中的当前文件名bool类型对象(此处称为no_push),它记录是否禁用以递归方式降序到子目录directory_options类型的对象(此处称为myoptions),它记录在构造时建立的选项
recursive_directory_entry 类型的默认构造对象在 mystack.top().first 处具有一个序列末迭代器,它表示序列末迭代器。 例如,假定目录 abc 包含条目 def(目录)、def/ghi 和 jkl,则代码:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
将使用参数 path("abc/def/ghi") 和 path("abc/jkl") 发起访问。 可使用以下两种方式,通过目录子树限定排序:
仅当使用值为
directory_options::follow_directory_symlink的directory_options参数构造recursive_directory_iterator时,才会扫描目录符号链接。如果调用
disable_recursion_pending,则不会以递归方式扫描在增量过程中遇到的后续目录。
构造函数
| 构造函数 | 说明 |
|---|---|
| recursive_directory_iterator | 构造一个 recursive_directory_iterator。 |
成员函数
| 成员函数 | 说明 |
|---|---|
| depth | 返回 mystack.size() - 1,说明 pval 的深度为零。 |
| disable_recursion_pending | 将 no_push 存储在 true 中。 |
| increment | 按顺序推进到下一个文件名。 |
| options | 返回 myoptions。 |
| pop | 返回下一个对象。 |
| recursion_pending | 返回 !no_push。 |
运算符
| 运算符 | 说明 |
|---|---|
| operator!= | 返回 !(*this == right)。 |
| operator= | 默认成员赋值运算符的行为符合预期。 |
| operator== | 仅当 *this 和 right 均为序列末迭代器或均不为序列末迭代器时,才返回 true。 |
| operator* | 返回 myentry。 |
| operator-> | 返回 &**this。 |
| operator++ | 递增 recursive_directory_iterator。 |
要求
标头:filesystem<>
命名空间: std::tr2::sys
recursive_directory_iterator::depth
返回 mystack.size() - 1,说明 pval 的深度为零。
int depth() const;
recursive_directory_iterator::disable_recursion_pending
将 no_push 存储在 true 中。
void disable_recursion_pending();
recursive_directory_iterator::increment
按顺序推进到下一个文件名。
recursive_directory_iterator& increment(error_code& ec) noexcept;
参数
ec
指定的错误代码。
备注
该函数尝试推进到嵌套序列中的下一个文件名。 如果成功,它会将该文件名存储在 myentry 中;否则它会生成一个序列末迭代器。
recursive_directory_iterator::operator!=
返回 !(*this == right)。
bool operator!=(const recursive_directory_iterator& right) const;
参数
right
用于比较的 recursive_directory_iterator。
recursive_directory_iterator::operator=
默认成员赋值运算符的行为符合预期。
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;
参数
recursive_directory_iterator
要复制到 recursive_directory_iterator 的 recursive_directory_iterator。
recursive_directory_iterator::operator==
仅当 *this 和 right 均为序列末迭代器或均不为序列末迭代器时,才返回 true。
bool operator==(const recursive_directory_iterator& right) const;
参数
right
用于比较的 recursive_directory_iterator。
recursive_directory_iterator::operator*
返回 myentry。
const directory_entry& operator*() const;
recursive_directory_iterator::operator->
返回 &**this。
const directory_entry * operator->() const;
recursive_directory_iterator::operator++
递增 recursive_directory_iterator。
recursive_directory_iterator& operator++();
recursive_directory_iterator& operator++(int);
参数
int
指定的增量。
备注
第一个成员函数调用 increment(),然后返回 *this。 第二个成员函数复制该对象,并调用 increment(),然后返回副本。
recursive_directory_iterator::options
返回 myoptions。
directory_options options() const;
recursive_directory_iterator::pop
返回下一个对象。
void pop();
备注
如果 depth() == 0,则该对象成为序列末迭代器。 否则,该成员函数将终止当前(最深)目录的扫描,并在下一较浅深度继续扫描。
recursive_directory_iterator::recursion_pending
返回 !no_push。
bool recursion_pending() const;
recursive_directory_iterator::recursive_directory_iterator
构造一个 recursive_directory_iterator。
recursive_directory_iterator() noexcept;
explicit recursive_directory_iterator(const path& pval);
recursive_directory_iterator(const path& pval,
error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
directory_options opts);
recursive_directory_iterator(const path& pval,
directory_options opts,
error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) noexcept = default;
参数
pval
指定的路径。
error_code
指定的错误代码。
opts
指定的目录选项。
recursive_directory_iterator
所构造的 recursive_directory_iterator 要作为其副本的 recursive_directory_iterator。
注解
第一个构造函数将生成序列末迭代器。 第二个和第三个构造函数将 false 存储在 no_push 中,将 directory_options::none 存储在 myoptions 中,然后尝试将 pval 作为目录打开和读取。 如果成功,则它们将初始化 mystack 和 myentry 以指定嵌套序列中的第一个非目录文件名;否则它们将生成一个序列末迭代器。
第四个和第五个构造函数的行为与第二个和第三个类似,只不过它们首先将 opt 存储在 myoptions 中。 默认构造函数的行为与预期相同。