関数boost::filesystem::canonical()
( 1.66のドキュメント、現在のリリースのドキュメント) は 2 つの引数を提供します (エラー コードのオーバーロードを無視します) base
。最初の引数は正規化するパスです。2 番目の引数は、最初のパスが相対パスの場合に絶対パスにするために使用されるベース パスです。デフォルトでは、 current_path()がこの引数に使用されます。
Boost 1.60 では、いくつかの新機能が導入されていますboost::filesystem::weakly_canonical()
( 1.66のドキュメント、現在のリリースのドキュメント)。この関数には、この 2 番目の引数がありません。標準化された (C++17) バリアントstd::filesystem::canonical()
とstd::filesystem::weakly_canonical()
( cppreferenceを参照) についても同じことが言えます。
canonical()
と交換したいのですweakly_canonical()
が、第二引数を使いました。それが、この議論が削除されたことに気付いた方法です。なぜそれが削除されたのか、どうすれば自分でパスを絶対にすることができるのか疑問に思っています。
C++17 のこの解決策をほのめかす欠陥レポートを見つけましたが、率直に言って、その根拠はよくわかりません。説明や、ベースのオーバーロードが過剰に指定されている例があれば幸いです。
そしてもちろん、現在のディレクトリではないベースディレクトリを使用して、相対パスを絶対パスに変換する方法を考えています。これが私のターゲット システム (Visual C++ を使用する Windows) で正しい形式であることがわかっているため、 cppreference for でbase / p
示唆されているとおりに使用する必要がありますか?std::filesystem::absolute()