2017-07-30 3 views
-4

私はフォルダ内のすべてのファイルを繰り返し処理していて、その名前を文字列にしたいだけです。私はstd::filesystem::pathから文字列を取得したいです。それ、どうやったら出来るの?ファイルシステムのパスを文字列に変換する方法

マイコード:

#include <string> 
#include <iostream> 
#include <filesystem> 
namespace fs = std::experimental::filesystem; 

int main() 
{ 
    std::string path = "C:/Users/user1/Desktop"; 
    for (auto & p : fs::directory_iterator(path)) 
     std::string fileName = p.path; 
} 

私は次のエラーを取得するしかし:

non-standard syntax; use '&' to create a pointer to a member. 
+3

'p.path'がメンバー*機能*で、あなたは'() 'なしでそれを使用することはできません。 'std :: string fileName = p.path();' –

+0

yaと終わりに.string()を試してみてください:std :: string fName = p.path()。 –

答えて

1

string()を使用し、(タイプstd::filesystem::path::value_typeである)ネイティブ・エンコードされた文字列にstd::filesystem::pathを変換するには方法。他の*string()メソッドに注目してください。これにより、特定のエンコーディングの文字列(UTF-8文字列の場合はu8string())を取得できます。

例:

#include <filesystem> 
#include <string> 

namespace fs = std::filesystem; 

int main() 
{ 
    fs::path path = fs::u8path(u8"愛.txt"); 
    std::string path_string = path.u8string(); 
} 
+0

thx、私は私の行を次のように変更しなければなりません:std :: string fName = p.path()。string(); –

+0

の場合#include と名前空間fs = std :: filesystem; #include <実験/ファイルシステム> 名前空間fs = std :: experimental :: filesystem; – jstar

関連する問題