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

履歴 編集

function
<filesystem>

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

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

処理系