Namespaces
Variants

std::filesystem:: path

From cppreference.net
定義済みヘッダー <filesystem>
class path ;
(C++17以降)

path 型のオブジェクトは、ファイルシステム上のパスを表します。パスの構文的な側面のみが扱われます:パス名は存在しないパス、または現在のファイルシステムやOS上で存在が許可されていないパスを表す可能性があります。

パス名は以下の構文を持ちます:

  1. root-name (オプション) : 複数のルートを持つファイルシステム上のルートを識別します(例: "C:" または "//myserver" )。曖昧性がある場合、有効な root-name を形成する最長の文字シーケンスが root-name として扱われます。標準ライブラリは、OS APIが理解するものに加えて追加のroot-nameを定義する場合があります。
  2. root-directory (オプション) : ディレクトリ区切り文字で、存在する場合、このパスを 絶対パス としてマークします。欠落している場合(かつルート名以外の最初の要素がファイル名である場合)、パスは 相対パス となり、ファイル名に解決するための開始位置として別のパスが必要です。
  3. 以下の要素の0個以上:
  • file-name : ディレクトリ区切り文字または推奨ディレクトリ区切り文字ではない文字のシーケンス(OSまたはファイルシステムによって追加の制限が課される場合があります)。この名前は、ファイル、ハードリンク、シンボリックリンク、またはディレクトリを識別する可能性があります。2つの特別な file-name が認識されます:
  • dot : 単一のドット文字 . から構成されるファイル名は、現在のディレクトリを参照するディレクトリ名です。
  • dot-dot : 2つのドット文字 .. から構成されるファイル名は、親ディレクトリを参照するディレクトリ名です。
  • directory-separator s: スラッシュ文字 / または path::preferred_separator として提供される代替文字。この文字が繰り返される場合、単一のディレクトリ区切り文字として扱われます: / usr ///////lib / usr / lib と同じです。

パスは以下のアルゴリズムに従って 正規化 できます:

  1. パスが空の場合、停止する(空のパスの正規形式は空のパス)。
  2. directory-separator (複数のスラッシュで構成される可能性がある)を単一の path::preferred_separator に置換する。
  3. root-name 内の各スラッシュ文字を path::preferred_separator に置換する。
  4. dot と直後に続く directory-separator を削除する。
  5. 各非 dot-dot ファイル名で、直後に directory-separator dot-dot が続くもの、および直後に続く directory-separator を削除する。
  6. root-directory が存在する場合、すべての dot-dot と直後に続く directory-separator を削除する。
  7. 最後のファイル名が dot-dot の場合、末尾の directory-separator を削除する。
  8. パスが空の場合、 dot を追加する( . / の正規形式は . である)。

パスは、 begin() および end() 関数によって返されるイテレータを使用して要素ごとに走査できます。これらはパスを汎用形式で表示し、ルート名、ルートディレクトリ、および後続のファイル名要素を反復処理します(ルートディレクトリを識別するものを除き、ディレクトリ区切り文字はスキップされます)。パスの最後の要素がディレクトリ区切り文字である場合、最後のイテレータは空の要素を参照解除します。

path の非constメンバ関数を呼び出すと、 そのオブジェクトの要素を参照するすべてのイテレータが無効になります。

オペレーティングシステムが、前述の移植性のある generic 構文とは異なる native 構文を使用する場合、「検出されたフォーマット」を受け入れると定義されているライブラリ関数は、両方のフォーマットでパス名を受け入れます:検出されたフォーマットの引数は、genericフォーマットに一致し、かつオペレーティングシステムがネイティブパスとして受け入れない場合に限り、genericフォーマットであると見なされます。ディレクトリのパス名とファイルのパス名でネイティブフォーマットが異なるOSでは、genericパス名は、ディレクトリ区切り文字で終わる場合はディレクトリパスとして、それ以外の場合は通常ファイルとして扱われます。

いずれにせよ、pathクラスはネイティブ形式でパス名を格納しているかのように動作し、必要に応じて自動的に汎用形式に変換します(各メンバー関数は、パスをどの形式として解釈するかを指定します)。

POSIXシステムでは、汎用形式がネイティブ形式であり、これらを区別したり変換したりする必要はありません。

パスは暗黙的に std::basic_string との間で変換可能であり、これにより他のファイルAPIと併用することが可能となります。

ストリーム演算子 std::quoted を使用するため、後で ストリーム入力演算子 によって読み込まれる際に、スペースによって切り捨てが発生しません。

分解メンバー関数 (例: extension )は、他のAPIが文字列オブジェクトを返すのに対し、 filesystem::path オブジェクトを返します。

目次

翻訳の説明: - 「Contents」→「目次」に翻訳 - C++関連の専門用語(Member types、Member constants、Member functions、Concatenation、Modifiers、Format observers、Compare、Generation、Decomposition、Queries、Iterators、Non-member functions、Helper classes、Defect reports)は原文のまま保持 - HTMLタグ、属性、クラス名、ID、リンク先は一切変更せず - 番号付けと構造は完全に維持

メンバー型

定義
value_type ファイルシステムのネイティブエンコーディングで使用される文字型: char (POSIX)、 wchar_t (Windows)
string_type std:: basic_string < value_type >
const_iterator value_type path である定数 LegacyInputIterator LegacyBidirectionalIterator のすべての要件を満たすが、等しいデリファレンス可能なイテレータ a b (型 const_iterator ) について、 * a * b が同じオブジェクトを参照する必要はない。

const_iterator が実際に LegacyBidirectionalIterator であるかどうかは未規定。

iterator const_iterator
パス名の文字列表現の解釈方法を決定する。

以下の列挙子も定義される:

名前 説明
native_format ネイティブパス名形式
generic_format 汎用パス名形式
auto_format 実装定義形式(可能な場合は自動検出)

(公開メンバ列挙型)

メンバー定数

constexpr value_type preferred_separator
[static]
ポータブルな / に加えて使用可能な代替ディレクトリ区切り文字。Windowsでは、これはバックスラッシュ文字 \ です。POSIXでは、これはポータブルな区切り文字と同じスラッシュ / です。
(public static member constant)

メンバー関数

path を構築する
(public member function)
path オブジェクトを破棄する
(public member function)
別のパスを代入する
(public member function)
内容を割り当てる
(公開メンバ関数)
連結 (Concatenation)
ディレクトリ区切り文字を使用してパスに要素を追加する
(公開メンバー関数)
ディレクトリ区切り文字を導入せずに2つのパスを連結する
(公開メンバ関数)
修飾子
内容を消去する
(公開メンバ関数)
ディレクトリ区切り文字を優先ディレクトリ区切り文字に変換します
(公開メンバ関数)
ファイル名パスコンポーネントを削除
(公開メンバ関数)
最後のパスコンポーネントを別のパスで置き換える
(公開メンバ関数)
拡張子を置き換える
(公開メンバ関数)
2つのパスを交換する
(公開メンバ関数)
フォーマットオブザーバー
パスのネイティブ形式を返す
(公開メンバ関数)
ネイティブのパス名形式に変換されたパスを文字列として返す
(公開メンバ関数)
汎用パス名形式に変換されたパスを文字列として返す
(公開メンバ関数)
比較
2つのパスの字句表現を辞書順に比較する
(公開メンバ関数)
生成
パスを正規形式に変換
パスを相対形式に変換
パスを近接形式に変換
(公開メンバ関数)
分解 (Decomposition)
パスにルート名が存在する場合、それを返します
(公開メンバ関数)
パスにルートディレクトリが存在する場合、それを返します
(公開メンバー関数)
パスが存在する場合、そのルートパスを返します
(公開メンバ関数)
ルートパスからの相対パスを返す
(公開メンバー関数)
親パスのパスを返す
(公開メンバ関数)
ファイル名パスコンポーネントを返す
(公開メンバー関数)
パスコンポーネントのステム(最終拡張子を除いたファイル名)を返す
(公開メンバー関数)
ファイル拡張子パスコンポーネントを返す
(public member function)
クエリ
パスが空かどうかをチェックする
(公開メンバ関数)
対応するパス要素が空でないかチェックする
(公開メンバ関数)
ファイルシステムの位置を一意に識別するかどうかをチェックする root_path()
(公開メンバ関数)
イテレータ
パスを要素のシーケンスとしてアクセスするイテレータ
(公開メンバ関数)

非メンバー関数

namespace std::filesystem で定義
std::swap アルゴリズムを特殊化
(関数)
(C++17)
パスオブジェクトのハッシュ値を計算
(関数)
(C++17) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++20)
2つのパスを辞書順で比較
(関数)
(C++17)
ディレクトリ区切り文字で2つのパスを連結
(関数)
引用符付きパスに対するストリーム入出力を実行
(関数)
(C++17) (deprecated in C++20)
UTF-8エンコードされたソースから path を作成
(関数)

ヘルパークラス

namespaceで定義
std::filesystem::path のハッシュサポート
(クラステンプレートの特殊化)
filesystem::path のフォーマットサポート
(クラステンプレートの特殊化)

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3657 C++17 hash path に対して無効化されていた 有効化