2009-11-02 14 views
11

コマンドライン引数の解析に役立つライブラリがたくさん見つかりましたが、いずれもファイル名の処理に対応していないようです。コマンドラインで "../foo"のようなものを受け取った場合、ファイルのフルパスをどのように把握するのですか?ファイル名のコマンドライン引数の絶対パスを取得するにはどうすればよいですか?

+7

ファイルの完全なパスが必要なのはなぜですか? Syscallsは相対パスでうまく動作します。 –

+0

私は 'pwd'コマンドはあなたにあなたの現在のパス/場所を与えると信じています。あなたは残りの部分を把握することができるはずですが、Andrew(上記のコメント)は正しいです。 –

+1

私のユーティリティはテキストファイルを生成するので、完全なパスが必要です。パスを構築することは痛みのように思えますが、これはすでに1000回解決されているに違いありません。 –

答えて

15

POSIXはrealpath()を持っています。

#include <stdlib.h> 
char *realpath(const char *filename, char *resolvedname); 

パス名から記述
のrealpath()関数が導出は、、名前その解像度伴わない同じファイルを、絶対パス名によって指し示さ」。 『』 .. "、またはシンボリックリンク。生成されたパス名は、の解決名が指し示すバッファに最大{PATH_MAX}バイトまで格納されます。

+0

編集のおかげで、Jonathan;特に要約のために。 – pmg

19

あなたはそのrelative pathから、ファイルのabsolute pathを取得するためにboost::filesystemを使用することができます。

namespace fs = boost::filesystem; 
fs::path p("test.txt"); 
fs::path full_p = fs::complete(p); // complete == absolute 
std::cout << "The absolute path: " << full_p; 
+4

V3のfs :: absolute(p) – KindDragon

1

シェルスクリプトでは、コマンド "readlink -f"にはrealpath()の機能があります。

関連する問題