質問

入力データを説明するファイルがあり、他のいくつかのファイルに分割されています。私の記述子ファイルで、最初に与えます パスa これは、他のすべてのファイルが見つかった場所を示しています。

オリジネーターは、(記述子ファイルの位置に対して)相対または絶対パスのいずれかを設定できます。

私のプログラムが呼び出されると、ユーザーは記述子ファイルの名前を付けます。それは現在の作業ディレクトリにないかもしれないので、 ファイル名b 与えられた場合、ディレクトリも含まれている場合があります。

私のプログラムが常に適切な場所で入力ファイルを見つけるには、この情報を組み合わせる必要があります。パスの場合 a 絶対に与えられます、私はそれだけする必要があります。それが相対的な場合、私はそれをパスに連結する必要があります b (つまり、ファイル名のディレクトリ部分)。

私は思った boost::filesystem::complete 私のために仕事をするかもしれません。残念ながら、そうではないようです。また、与えられたパスが絶対的であるかどうかをテストする方法を理解していませんでした。

何か案は?

役に立ちましたか?

解決

実際、私は最初にかなり見当違いでしたが、今では自分で解決策を見つけました。 「ベース」がパスAを保持し、ファイル名がBを保持するとき:

boost::filesystem::path basepath(base), filepath(filename);
if (!basepath.is_complete())
    basepath = filepath.remove_leaf() /= basepath;
base = basepath.string();

少なくともLinuxで動作します(ブーストせずに非常に簡単に行うのは非常に簡単ですが、まあ..)は、Windowsでテストする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top