最終更新日時(UTC):
が更新

履歴 編集

function
<filesystem>

std::filesystem::proximate(C++17)

namespace std::filesystem {
  path proximate(const path& p, std::error_code& ec);                   // (1)
  path proximate(const path& p, const path& base = current_path());     // (2)
  path proximate(const path& p, const path& base, std::error_code& ec); // (3)
}

概要

パスを現在の作業ディレクトリからの相対パスに変換する。

  • (1) : 現在の作業ディレクトリからパスpへの相対パスを構築する
  • (2), (3) : パスbaseからパスpへの相対パスを構築する

この関数の動作はrelative()関数とほぼ同じだが、対象パスpと元となるパスの間でパーティションが異なるなどの理由で相対パスの解決に失敗した場合に、空のパスではなく、正規化されたパスpが返る。

戻り値

(1)と(3)でエラーが発生した場合、ecにエラー情報が書き込まれ、path()が返る。

例外

  • (1), (3) : 仕様上は未規定だが、パスのメモリ確保で例外が発生する可能性がある
  • (2) : ファイルシステムがエラーを報告する場合がある。それに加えて、指定されたパスpbaseのいずれの部分パスも存在しない場合でもエラーである。エラーが発生した場合は、std::filesystem::filesystem_error例外を送出する

POSIXベースシステムでの例

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
  // 現在の作業ディレクトリからの相対パスに変換する
  fs::path p1 = fs::proximate("/a.txt");
  std::cout << p1 << std::endl;

  // 現在の作業ディレクトリからひとつ上の階層からの相対パスに変換する
  fs::path p2 = fs::proximate("/a.txt", "../");
  std::cout << p2 << std::endl;
}

出力

"../../a.txt"
"../a.txt"

バージョン

言語

  • C++17

処理系