recursive_directory_iterator 类

描述一个输入迭代器,它对目录中的文件名进行排序,可能以递归方式降序到子目录。 对于迭代器 X,表达式 *X 的计算结果为一个 directory_entry 类的对象,它包装了文件名及与其状态有关的任何信息。

有关详细信息和代码示例,请参阅文件系统导航 (C++)

语法

class recursive_directory_iterator;

备注

类模板存储以下对象:

  1. stack<pair<directory_iterator, path>> 类型的对象(此处出于阐述目的称为 mystack),它表示待排序的一套目录

  2. directory_entry 类型的对象(此处称为 myentry),它表示目录序列中的当前文件名

  3. bool 类型对象(此处称为 no_push),它记录是否禁用以递归方式降序到子目录

  4. directory_options 类型的对象(此处称为 myoptions),它记录在构造时建立的选项

recursive_directory_entry 类型的默认构造对象在 mystack.top().first 处具有一个序列末迭代器,它表示序列末迭代器。 例如,假定目录 abc 包含条目 def(目录)、def/ghijkl,则代码:

for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
    visit(next->path());

将使用参数 path("abc/def/ghi")path("abc/jkl") 发起访问。 可使用以下两种方式,通过目录子树限定排序:

  1. 仅当使用值为 directory_options::follow_directory_symlinkdirectory_options 参数构造 recursive_directory_iterator 时,才会扫描目录符号链接。

  2. 如果调用 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_iteratorrecursive_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 作为目录打开和读取。 如果成功,则它们将初始化 mystackmyentry 以指定嵌套序列中的第一个非目录文件名;否则它们将生成一个序列末迭代器。

第四个和第五个构造函数的行为与第二个和第三个类似,只不过它们首先将 opt 存储在 myoptions 中。 默认构造函数的行为与预期相同。

另请参阅

头文件引用
<filesystem>
文件系统导航 (C++)