directory_iterator - 复制到“倒带”?

时间:2011-06-18 13:47:40

标签: 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
  文件总数:3
  [..] / program.pdb
  断言失败:m_imp-&gt; m_handle!= 0&amp;&amp; “内部程序错误”,文件c:\ program files \ boost \ boost_1_44 \ boost \ filesystem \ v2 \ operations.hpp,第1001行

如果我做了一个新的directory_iterator,它可以正常工作:

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

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

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

1 个答案:

答案 0 :(得分:0)

这是同一个问题。

目录迭代器是一个传递迭代器。你不能保存副本并再次通过。每次递增迭代器时都会得到下一个条目,但是你不能递减它,你也不能重新开始并重新开始,即使你已经保存了一个起点的副本。

如果要遍历两次,则需要创建另一个迭代器(并且存在文件数已更改的风险)。