0

Boost::Filesystemを使用して Linux のディレクトリをトラバースしています。

パスを 1 つ前のディレクトリに再定義する必要があるたびに、次のようなことを行います。

auto p = boost::filesystem::current_path();
p /= "../";

問題は、「p」を出力すると、「../」がまだ付けられたままのパスが表示されることです。ディレクトリに戻ることを決定するたびに、これを評価するにはどうすればよいですか。パスを毎回長くするのではなく、ディレクトリに戻ってパスを短くしたいと思います。

これらの関数は参照によってパスを取得するため、これらの関数の1つがそれを行う可能性があると思いましたが、
boost::filesystem::absolute(...)
boost::filesystem::canonical(...)
それらを呼び出して「p」を再出力した後でも、結果には「../」が表示されます。

path& make_preferred()どちらも機能しません。

4

1 に答える 1

1

canonicalまたはabsoluteそれを行う方法です。返されたパスを使用しますか? 指定されたパスは定数参照として使用されるため、その場で変更されることはありません。ブーストマニュアルから:

path canonical(const path& p, const path& base = current_path());
path canonical(const path& p, system::error_code& ec);
path canonical(const path& p, const path& base, system::error_code& ec);

概要: 存在しなければならない p を、シンボリック リンク、ドット、またはドット ドット要素を含まない絶対パスに変換します。

于 2013-09-28T22:35:50.933 に答える