由于使用了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

我几乎无法弄清楚这个错误的原因。可以尝试..寻求帮助吗?
预先感谢您的任何帮助

最佳答案

您将在循环以及rdi声明中增加for:

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

这意味着rdi可能是循环中的end_rdi(结束迭代器,表示经过最后一个元素)。您这样做有什么理由吗? (如果这是故意的,则应在增加rdi != end_rdi之后再次进行检查。)

关于c++ - 使用boost::filesystem递归列出目录文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15182980/

10-10 05:46