我需要以递归方式将文件搜索到一个目录及其子目录中,但我想从搜索中排除一个路径(带有文件和子目录)。
我正在使用std::experimental::filesystem::recursive_directory_iterator
和pop()
修饰符,但它不起作用。哪里我错了?
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;
}
}
首先,基于范围的for循环操作隐藏的iterator
副本,而不是iterator
本身。如果需要操作用于迭代的迭代器,则需要常规的for
:
for(decltype(iterator) end; iterator != end; ++iterator) {
// ...
}
其次,pop
的意思是“上升一级”,但是当你将iterator->path()
与你的排除路径进行比较时,你的迭代没有进入目录,所以pop
不会做正确的事情。相反,使用disable_recursion_pending
。