2016-05-12 5 views
4

私は文字列とディレクトリへのパスを取得するタスクを持っています。そのディレクトリとすべてのサブディレクトリからすべての.txtファイルを開き、すべての.txtを私はその文字列を見つけることができました。.txtファイルのディレクトリとサブディレクトリをスキャンする

ディレクトリ内のそれらの.txtファイルへのパスを取得することができましたが、それ以上サブディレクトリに移動することはできません。 これを実行するコマンドはありますか? Pythonで私は使用した:

for path, dirs, files in os.walk(dirPath): 
     for f in files: 
      if f.endswith('.txt'): 

しかし、私はC + +のようなコマンドを見つけることができません。

おかげで、次のようになりましたC++17にこれを受け入れてきたfilesystemTechnical Specificationを行うことができるサポートコンパイラの

+1

'のstd :: filesystem'は、Cのための唯一の提案です++ 1zなので、2017年になるまで、使用しているプラ​​ットフォームを指定してください – myaut

+1

またはBoostをインストールして設定して['boost :: filesystem']を入手してください(http://www.boost.org/doc/libs/1_60_0/libs/filesystem /doc/reference.html)。 @myautの要求を履行し、プラットフォームを指定する方が簡単かもしれません。 – user4581301

+2

それほど重複しない:http://stackoverflow.com/questions/612097/how-can-i-get-the-list-of-files-in-a-directory-using-c-or-c。最も一般的なプラットフォーム上のディレクトリをリストすることは、1つの答えでカバーされます。そこから簡単にtxtファイルをフィルタリングすることができるはずです。 – user4581301

答えて

2

#include <string> 
#include <iostream> 
#include <experimental/filesystem> // Later (C++17) just <filesystem> 

namespace fs = std::experimental::filesystem; 

int main(int, const char* const* argv) 
{ 
    std::string dir = "."; 

    if(argv[1]) 
     dir = argv[1]; 

    for(auto& item: fs::recursive_directory_iterator(dir)) 
    { 
     if(!fs::is_regular_file(item.path()) 
     || item.path().extension() != ".txt") 
      continue; 

     // open text file here 
     std::cout << "Found text file: " << item.path().string() << '\n'; 
    } 
} 
関連する問題