recursive_directory_iterator 类
描述一个输入迭代器,它对目录中的文件名进行排序,可能以递归方式降序到子目录。 对于迭代器 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
中。 默认构造函数的行为与预期相同。