2017-12-18 4 views
1

ファイルを1つのディレクトリとそのサブディレクトリに再帰的に検索する必要がありますが、検索から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

まず、範囲ベースのforループはiteratorの隠されたコピー上で動作し、ないiteratorそのもの。あなたが繰り返しのために使用されている反復子を操作する必要がある場合は、あなたが定期的にforが必要になります。

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

第二に、popは、「1つ上のレベルに行く」を意味していますが、あなたの除外パスにiterator->path()を比較すると、あなたの反復は「hasn tはディレクトリに降りたので、popは正しいことをしません。代わりに、disable_recursion_pendingを使用してください。

関連する問題