c++ - directory_iterator - 复制到 "rewind"?

标签 c++ iterator directory boost-filesystem

所以我写了一个小程序来试用 Boost Filesystem。我的程序将写入当前路径中有多少个文件,然后是文件名。 这是我的程序:

#include <iostream>
#include <boost/filesystem.hpp>

using namespace boost::filesystem;

int main(){
    directory_iterator start = directory_iterator(current_path());
    directory_iterator di = start;
    int count;
    for (count = 0; di != directory_iterator(); ++di, ++count);
    std::cout << std::endl << "total number of files: " << count << std::endl;
    di = start;
    for (; di != directory_iterator(); ++di){
        std::cout << *di << std::endl;
    }
    return 0;
}

现有的文件是 program.exe、.ilk 和 .pdb
但是我得到以下输出(为简洁起见省略了整个路径):

$ program.exe
total number of files: 3
[..]/program.pdb
Assertion failed: m_imp->m_handle != 0 && "internal program error", file c:\program files\boost\boost_1_44\boost\filesystem\v2\operations.hpp, line 1001

如果我改用一个新的 directory_iterator,它工作正常:

di = start;
// .. becomes ..
di = directory_iterator(current_path());

我注意到一个 similar question与 directory_iterators 相关,但我不知道它们指的是什么,或者是否是同一个问题。

问题是: 为什么我不能保存一个 startiterator 然后用它来倒回我的迭代器?

最佳答案

同样的问题。

目录迭代器是单遍迭代器。您不能保存拷贝并进行第二遍。每次递增迭代器时,您都会获得下一个条目,但您不能递减它,也不能返回并重新开始,即使您保存了起点的拷贝也是如此。

如果要遍历两次,则需要创建另一个迭代器(并冒着文件数发生变化的风险)。

关于c++ - directory_iterator - 复制到 "rewind"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6396469/

相关文章:

c++ - 通过带有成员函数指针的 QHash 调用成员函数的正确方法

c++ - QT 在另一个小部件中插入小部件

java - 如何在某些源上创建并发迭代器?

rust - 如何归还两个借用的 RefCell 的组合?

c++ - 混合低级 C/C++ 代码

c++ - 有什么方法可以强制openmp获得所需的线程数?

c# - yield 递延迭代问题

android:如何隐藏文件夹不出现在图库中

view - 项目 View 中的 IntelliJ IDEA 文件夹而不是包

python - 为什么python的递归复制和命令行不一样?