Поэтому я написал небольшую программу, чтобы попробовать 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\boost44\boost\filesystem\v2\operations.hpp, строка 1001#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; }
Если вместо этого я создам новый directory_iterator, он будет работать нормально:
di = start;
// .. becomes ..
di = directory_iterator(current_path());
Я заметил похожий вопрос, связанный с directory_iterators, но у меня нет идея, что они имеют в виду, или если это та же проблема.
Вопрос: почему я не могу сохранить startiterator, а затем использовать его для перемотки моего итератора?