2

由于类 recursive_directory_iterator (我不必编写递归代码),我正在使用新的 boost v1.5.3 来执行如下任务:

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

我几乎没有弄清楚这个错误的原因。任何尝试..赶上帮助?提前感谢您的帮助

4

2 回答 2

5

rdi在循环内部以及for声明中递增:

for (; rdi != end_rdi; rdi++)
{
    rdi++;

这意味着它rdi可能是end_rdi循环中的(结束迭代器,这意味着过去的最后一个元素)。你这样做有什么理由吗?rdi != end_rdi(如果这是故意的,您应该在增加它后再次检查以确保。)

于 2013-03-03T06:42:59.367 回答
2

你可以尝试这样的事情:

recursive_directory_iterator dir(path(Dir));
for(auto&& i : dir) {
    if (is_directory(i)) {
        //Do whatever you want
        cout << i << endl;
    }
}
于 2016-07-01T19:10:20.300 回答