• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <filesystem>

    std::filesystem::current_path

    namespace std::filesystem {
      path current_path();                                            // (1)
      path current_path(std::error_code& ec);                         // (2)
    
      void current_path(const path& p);                               // (3)
      void current_path(const path& p, std::error_code& ec) noexcept; // (4)
    }
    

    概要

    現在の作業ディレクトリを取得・設定する。現在の作業ディレクトリとは、自身のプロセスに関するディレクトリであり、自身からの相対パスを解決する開始位置である。

    • (1), (2) : 現在の作業ディレクトリを取得する
    • (3), (4) : 現在の作業ディレクトリを設定する

    効果

    • (3), (4) : パスpを、現在の作業ディレクトリとして設定する
      • POSIX環境では、chdir()関数を使用する

    戻り値

    • (1), (2) : 現在の作業ディレクトリの絶対パスを、ネイティブフォーマットとして返す
      • POSIX環境では、getcwd()関数を使用する
      • エラーが発生した場合、 (2) ではpath()が返る
    • (3), (4) : なし

    例外

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

    備考

    • この関数名は、単一のディレクトリ名ではなくパスが返る、ということを強調することを意図して命名された
    • 多くのOSでは、現在の作業ディレクトリは、危険なグローバル変数である。サードパーティライブラリやシステムライブラリ、あるいは別のスレッドによって、予期せず変更される可能性がある

    #include <iostream>
    #include <filesystem>
    
    namespace fs = std::filesystem;
    
    int main()
    {
      // 現在の作業ディレクトリを取得
      fs::path p = fs::current_path();
      std::cout << p << std::endl;
    
      // 現在の作業ディレクトリを設定
      fs::current_path("/");
      std::cout << fs::current_path() << std::endl;
    }
    

    出力例

    "/home/my_app"
    "/"
    

    バージョン

    言語

    • C++17

    処理系