Я использую новый boost, v1.5.3, для выполнения этой задачи, как и после, благодаря классу recursive_directory_iterator (мне не нужно писать рекурсивный код):Реестр файлов каталога рекурсивно с boost :: filesystem
void ListDirRec(const char *Dir, vector<string>& DirFileList, const char* ext)
{
recursive_directory_iterator rdi(Dir);
recursive_directory_iterator end_rdi;
DirFileList.empty();
string ext_str0(ext);
for (; rdi != end_rdi; rdi++)
{
rdi++;
//cout << (*di).path().string() << endl;
cout << (*rdi).path().string() << endl;
//cout << " <----- " << (*rdi).path().extension() << endl;
//string ext_str1 = (*rdi).path().extension().string();
if (ext_str0.compare((*rdi).path().extension().string()) == 0)
{
DirFileList.push_back((*rdi).path().string());
}
}
файлы списка функций с определенным расширением. Эта функция работает в тех случаях, но часто возвращают «утверждение не ошибка», как:
**** Internal program error - .... assertion (m_imp.get()) ... operations.hpp(952): dereference of end recursive_directory_iterator
Я едва выяснить причину этой ошибки. Может ли кто-нибудь попробовать .. поймать помощь? заранее спасибо за любую помощь
Я не работал с буст :: файловую систему на всех, но не следует ли назначать что-либо для end_rdi? – dutt
@dutt нет, это нормально, конструктор по умолчанию возвращает в конце итератор [(docs)] (http://www.boost.org/doc/libs/1_50_0/libs/filesystem/doc/reference.html#Class- recursive_directory_iterator), так же, как 'std :: istream_iterator' –
А, ладно. – dutt