std::filesystem::path
| ヘッダー <filesystem> で定義 |
||
| class path; |
(C++17以降) | |
path 型のオブジェクトは、ファイルシステムのパスを表します。パスの構文的な側面のみを扱います。パス名は、存在しないパス、あるいは現在のファイルシステムやOSでは許可されていないパスを表すことさえあります。
パス名は以下の構文を持ちます。
- ルート名(省略可能): 複数のルートを持つファイルシステム(例: "C:" や "//myserver")のルートを識別します。曖昧な場合、有効な ルート名 を形成する最も長い文字シーケンスが ルート名 として扱われます。標準ライブラリは、OS API が認識するもの以外にも、追加のルート名を定義することがあります。
- ルートディレクトリ(省略可能): ディレクトリセパレータで、存在する場合、このパスを *絶対パス* としてマークします。これが欠落している場合(そしてルート名以外の最初の要素がファイル名である場合)、パスは *相対パス* となり、ファイル名に解決するためには別のパスを開始位置として必要とします。
- 0 個以上の以下の要素
- ファイル名: ディレクトリセパレータまたは優先ディレクトリセパレータではない文字のシーケンス(OSやファイルシステムによって追加の制限が課される場合があります)。この名前は、ファイル、ハードリンク、シンボリックリンク、またはディレクトリを識別する可能性があります。2つの特別な ファイル名 が認識されます。
- ドット: 単一のドット文字 . からなるファイル名は、現在のディレクトリを参照するディレクトリ名です。
- ドットドット: 2つのドット文字 .. からなるファイル名は、親ディレクトリを参照するディレクトリ名です。
- ディレクトリセパレータ: フォワードスラッシュ文字 / または
path::preferred_separatorとして提供される代替文字。この文字が繰り返される場合、単一のディレクトリセパレータとして扱われます: /usr///////lib は /usr/lib と同じです。
パスは、次のアルゴリズムに従って *正規化* できます。
- パスが空の場合、停止します(空のパスの正規形は空のパスです)。
- 各 ディレクトリセパレータ(複数のスラッシュで構成される場合があります)を単一の
path::preferred_separatorに置き換えます。 - ルート名 の各スラッシュ文字を
path::preferred_separatorに置き換えます。 - 各 ドット とそれに直接続く ディレクトリセパレータ を削除します。
ドットドットファイル名ではないファイル名と、それに直接続く ディレクトリセパレータ および ドットドット、そしてそれに直接続く ディレクトリセパレータ を削除します。- ルートディレクトリ が存在する場合、すべての ドットドット とそれに直接続く ディレクトリセパレータ を削除します。
- 最後のファイル名が ドットドット である場合、末尾の ディレクトリセパレータ を削除します。
- パスが空の場合、ドット を追加します(./ の正規形は . です)。
begin() および end() 関数が返すイテレータを介して、パスを要素ごとに走査できます。これは、パスをジェネリック形式で表示し、ルート名、ルートディレクトリ、および後続のファイル名要素を反復処理します(ディレクトリセパレータは、ルートディレクトリを識別するものを除いてスキップされます)。パスの最後の要素がディレクトリセパレータの場合、最後のイテレータは空の要素を逆参照します。
path の非constメンバ関数を呼び出すと、そのオブジェクトの要素を参照するすべてのイテレータが無効になります。
OSが、上記で説明されたポータブルな *ジェネリック* 構文とは異なる *ネイティブ* 構文を使用する場合、「検出された形式」を受け入れるように定義されたライブラリ関数は、両方の形式でパス名を受け入れます。検出された形式の引数は、ジェネリック形式に一致するが、オペレーティングシステムでネイティブパスとして受け入れられない場合にのみ、ジェネリック形式であると見なされます。ネイティブ形式がディレクトリのパス名とファイルのパス名で異なるOSでは、ジェネリックパス名はディレクトリセパレータで終わる場合はディレクトリパスとして、それ以外の場合は通常のファイルとして扱われます。
いずれの場合も、path クラスは、パス名をネイティブ形式で格納し、必要に応じて自動的にジェネリック形式に変換するかのように動作します(各メンバ関数は、パスをどちらの形式で解釈するかを指定します)。
POSIX システムでは、ジェネリック形式はネイティブ形式であり、それらを区別したり変換したりする必要はありません。
パスは、std::basic_string との間で暗黙的に変換可能であり、これにより他のファイルAPIで使用できるようになります。
ストリーム演算子 は std::quoted を使用するため、ストリーム入力演算子 で後で読み取るときにスペースが切り捨てられるのを防ぎます。
分解メンバ関数(例: extension)は、他のAPIが文字列オブジェクトを返すのとは対照的に、filesystem::path オブジェクトを返します。
目次 |
[編集] メンバ型
| 型 | 定義 | ||||||||
value_type
|
ファイルシステムのネイティブエンコーディングで使用される文字型: POSIX では char、Windows では wchar_t。 | ||||||||
string_type
|
std::basic_string<value_type> | ||||||||
const_iterator
|
LegacyInputIterator であり、value_type が path で、LegacyBidirectionalIterator のすべての要件を満たしますが、2つの等しい逆参照可能なイテレータ a と b の型が const_iterator である場合、*a と *b が同じオブジェクトを参照するべきという要件はありません。
| ||||||||
iterator
|
const_iterator
| ||||||||
| パス名の文字列表現をどのように解釈するかを決定します。 以下の列挙子も定義されています。
(public member enum) |
[編集] メンバ定数
| constexpr value_type preferred_separator [static] |
ポータブルな / に加えて使用できる代替ディレクトリセパレータ。Windows ではバックスラッシュ文字 \ です。POSIX では、ポータブルセパレータと同じフォワードスラッシュ / です。 (public static member constant) |
[編集] メンバ関数
path を構築します。(public member function) | |
path オブジェクトを破棄します。(public member function) | |
| 別のパスを代入します。 (public member function) | |
| 内容を代入する (public member function) | |
連結 | |
| ディレクトリセパレータでパスの末尾に要素を追加します。 (public member function) | |
| ディレクトリセパレータを導入せずに2つのパスを連結します。 (public member function) | |
変更 | |
| 内容を削除します。 (public member function) | |
| ディレクトリセパレータを優先ディレクトリセパレータに変換します。 (public member function) | |
| ファイル名のパスコンポーネントを削除します。 (public member function) | |
| 最後のパスコンポーネントを別のパスに置き換えます。 (public member function) | |
| 拡張子を置き換えます。 (public member function) | |
| 2つのパスをスワップします。 (public member function) | |
フォーマットオブザーバー | |
| パスのネイティブバージョンを返します。 (public member function) | |
| パスをネイティブパス名形式から文字列に変換して返します。 (public member function) | |
| パスをジェネリックパス名形式から文字列に変換して返します。 (public member function) | |
Compare | |
| 2つのパスの字列表現を辞書順に比較します (public member function) | |
生成 | |
| パスを正規形に変換します。 パスを相対形式に変換します。 パスを近接形式に変換します。 (public member function) | |
分解 | |
| パスのルート名を返します(存在する場合)。 (public member function) | |
| パスのルートディレクトリを返します(存在する場合)。 (public member function) | |
| パスのルートパスを返します(存在する場合)。 (public member function) | |
| ルートパスに対する相対パスを返します。 (public member function) | |
| 親パスのパスを返します。 (public member function) | |
| ファイル名のパスコンポーネントを返します。 (public member function) | |
| パスのステムコンポーネント(最後の拡張子を除いたファイル名)を返します。 (public member function) | |
| ファイルの拡張子パスコンポーネントを返します。 (public member function) | |
問い合わせ | |
| パスが空かどうかをチェックする (public member function) | |
| 対応するパス要素が空でないかどうかをチェックします。 (public member function) | |
| root_path() がファイルシステムの位置を一意に識別するかどうかをチェックします。 (public member function) | |
イテレータ | |
| パスの要素シーケンスへのイテレータアクセス。 (public member function) | |
[編集] 非メンバ関数
| 名前空間
std::filesystem で定義 | |
| (C++17) |
std::swap アルゴリズムを特殊化する (関数) |
| (C++17) |
パスオブジェクトのハッシュ値を計算する (function) |
| (C++17)(C++17)(C++20まで)(C++17)(C++20まで)(C++17)(C++20まで)(C++17)(C++20まで)(C++17)(C++20まで)(C++20) |
2つのパスを辞書順に比較します (function) |
| (C++17) |
ディレクトリセパレータで2つのパスを連結します。 (function) |
| (C++17) |
引用符で囲まれたパスに対するストリーム入力および出力を実行します。 (function) |
| (C++17)(C++20で非推奨) |
UTF-8エンコードされたソースから`path`を作成 (関数) |
[編集] ヘルパークラス
| 名前空間
std で定義 | |
| std::filesystem::path のハッシュサポート。 (クラステンプレートの特殊化) | |
filesystem::path のフォーマットサポート。(class template specialization) | |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3657 | C++17 | path の hash が無効化されていました。 |
有効化されました。 |