2013-05-01 14 views
9

ディレクトリ内のすべてのファイルに対して繰り返し処理を行い、その内容を出力します。 Boostは反復部分を非常にうまく処理しますが、私はconst char *にそれをどのように変換するのか分かりません。boost :: filesystem :: directory_iteratorをconst charに変換する方法*

boost::filesystem::directory_iterator path_it(path); 
    boost::filesystem::directory_iterator end_it; 
    while(path_it != end_it){ 
     std::cout << *path_it << std::endl; 

     // Convert this to a c_string 
     std::ifstream infile(*path_it); 
    } 

私はこのdocumentationを読み取ろうとしましたが、stringまたはc_str()ようなものを見つけることができませんでした。私はC++boostの両方に新しく、ソースコードをダンプするのではなく、メンバーが何であり、どのような機能が利用できるのかを基本的に教えるドキュメンテーションのようなものを見つけることを望んでいました。

おっとり申し訳ありませんが、*path_itc stringに変換する方法を教えてもらえますか?

+0

それは[directory_entry](http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/referenceにあります。 html#Class-directory_entry)。 –

+0

ありがとう、これからそれを考え出した。どのように私は少し苦痛な方法で後押しを学ぶことができるかについてのヒント? – nikhil

+1

私はあなたの最善の策は単体テストを試してみることだと思います。または、自分自身で書き出して物事を説明してください。 –

答えて

12

とき、それはdirectory_entryを返すイテレータ間接参照:

const directory_entry& entry = *path_it; 

あなたが発見したとしてあなたは、operator<<ostreamと一緒にこれを使用することができます:

std::cout << entry << std::endl; 

あなたが使用して文字列を作成することができますostringstream

std::ostringstream oss; 

oss << entry; 

std::string path = oss.str(); 

別の方法としては、directory_entryから直接stringとしてパスにアクセスすることができます

std::string path = entry.path().string(); 
+1

コメントと回答の両方をありがとう。 – nikhil

1

ドキュメントを見てから、path_it-> path()。c_str()を実行すると思います。これは、directory_iteratorがpath_functionを持つpath_functionを持つdirectory_entryを反復処理するためです。

+0

私は 'path_it-> path()。string()。c_str()'を実行する必要がありました。 – nikhil

関連する問題