std :: experimental :: filesystem :: recursive_directory_iterator跳过文件夹及其子文件夹

时间:2017-12-18 10:01:56

标签: c++ std c++17 std-filesystem

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

我使用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 个答案:

答案 0 :(得分:1)

首先,基于范围的for循环对SELECT MO.MaxOmzet--, --**Your other columns go here** FROM vFietsOmzet FO JOIN vAccessoireOmzet AO ON --**Your JOIN criteria goes here** CROSS APPLY dbo.fnMaxOmzet (FO.FietsOmzet, AO.AccessoireOmzet) MO; 的隐藏副本进行操作,而不是iterator本身。如果需要操作用于迭代的迭代器,则需要常规iterator

for

其次,for(decltype(iterator) end; iterator != end; ++iterator) { // ... } 表示“上升一级”,但是当您将pop与排除的路径进行比较时,您的迭代没有进入目录,因此iterator->path()不会做正确的事。相反,请使用pop