• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <filesystem>

    std::filesystem::relative

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

    概要

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

    • (1) : 現在の作業ディレクトリからパスpへの相対パスを構築する
    • (2), (3) : パスbaseからパス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::relative("/a.txt");
      std::cout << p1 << std::endl;
    
      // 現在の作業ディレクトリからひとつ上の階層からの相対パスに変換する
      fs::path p2 = fs::relative("/a.txt", "../");
      std::cout << p2 << std::endl;
    }
    

    出力

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

    バージョン

    言語

    • C++17

    処理系