そこで、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->m_handle != 0 && 「内部プログラム エラー」、ファイル 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 に関連する同様の質問に気付きましたが、それらが何を参照しているのか、それとも同じ問題なのかわかりません。
質問: startiterator を保存して、それを使用して iterator を巻き戻すことができないのはなぜですか?