3

我需要将文件递归搜索到一个目录及其子目录中,但我想从搜索中排除一个路径(及其文件和子目录)。

我正在使用std::experimental::filesystem::recursive_directory_iteratorpop()修饰符,但它不起作用。我哪里错了?

void search(const char* pathToSearch,const char* pathToExclude){        
    std::experimental::filesystem::recursive_directory_iterator iterator(pathToSearch);
    for (auto& p : iterator) {
        if (p.path() == std::experimental::filesystem::directory_entry(pathToExclude).path()) iterator.pop();
        if (fs::is_directory(p)) continue; //exclude directory from output
        else std::cout << p << std::endl;
    }
}
4

1 回答 1

3

首先,基于范围的 for 循环在 的隐藏副本上运行iterator,而不是在iterator其自身上运行。如果您需要操作用于迭代的迭代器,则需要常规for

for(decltype(iterator) end; iterator != end; ++iterator) {
   // ...
}

其次,pop意味着“上升一级”,但是当您与iterator->path()排除的路径进行比较时,您的迭代没有下降到目录中,因此pop不会做正确的事情。相反,使用disable_recursion_pending.

于 2017-12-18T10:48:47.843 回答