2017-12-18 216 views
1

我需要遞歸搜索文件到一個目錄及其子目錄中,但我想從搜索中排除一個路徑(及其文件和子目錄)。std :: experimental :: filesystem :: recursive_directory_iterator跳過文件夾及其子文件夾

我正在使用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; 
    } 
} 

回答

1

首先,對於循環基於範圍的上iterator一個隱藏的副本,而不是iterator本身運行。如果你需要操縱迭代器被用於迭代,你需要定期for

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

其次,pop的意思是「去上一級」,但是當你比較iterator->path()到排除的路徑,你的迭代不是招」 t下降到目錄,所以pop不會做正確的事情。相反,請使用disable_recursion_pending

相關問題