こんにちは私は現在、ファイルの場所の完全なパスを取得し、次のタイプの変数に入れられるプログラムを持っています:boost :: filesystem2 :: path
私はこれを行う方法を調べて、それを使用してそれを見つけました:
string result1 = boost::filesystem::basename (myPath)
パスを文字列に変換しますが、ファイル名のみを変換します(たとえば、パスが「C:\ name\bobsAwesomeWordDoc.docx」の場合、「bobsAwesomeWordDoc」を返すだけです)。
パス全体を文字列に変換する方法について以下を見つけましたが、自分のプログラムでそれを実装する方法がわかりません。複数の方法を試しましたが、変換エラーが発生しています。
const std :: string&string():このルーチンは、パスの文法規則に従って書式設定された、パスの初期化に使用された文字列のコピーを返します。
(発見 ここ )
私が試してみました:
string result1 = string& (myPath);
その他のいくつかのバリエーション。
myPath.string()
を呼び出すだけです。
パスを文字列に変換するだけでなく、シンボリックリンク要素のない絶対パスであるパスの正規バージョンを最初に取得し、that文字列に:
boost::filesystem::canonical(myPath).string();
追伸-私は昔からBoostでプログラミングを行ってきましたが、この情報をドキュメントで簡単に見つけることができませんでした。
更新(2017年10月)
ドキュメント: boost :: filesystem :: canonical 。
ただし、C++ 17の時点で std :: filesystem があり、 canonical などがあります。
これはwxWidgetsで機能しました:(wxユーティリティを使用する必要があることはわかっていますが、テストです)
void WxWidgetsBoostTestFrame::OnTestBtnClick(wxCommandEvent& event)
{
boost::filesystem::path currentPath;
currentPath = boost::filesystem::current_path();
std::string curDirString;
curDirString = boost::filesystem::canonical(currentPath).string();
wxString mystring(curDirString.c_str(), wxConvUTF8);
wxMessageBox(mystring); // output: C:/Users\client\Desktop...
}
myPath.generic_string()
を呼び出すと、必要な処理が行われます。
これを行う
path.c_str();
元気です。