名前空間
変種
操作

std::filesystem::path

提供: cppreference.com
 
 
 
 
ヘッダ <filesystem> で定義
class path;
(C++17以上)

path 型のオブジェクトはファイシステム上のパスを表現します。 パスの構文的な側面のみが扱われます。 存在しないパスを表現しても構いませんし、現在のファイルシステムや OS で存在することが許されないパスを表現しても構いません。

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

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

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

1) パスが空であれば、何もしません (空パスの正規形は空パスです)
2) それぞれのディレクトリ区切り文字 (複数のスラッシュで構成される場合もあります) を単一の path::preferred_separator に置き換えます。
3) ルート名内のそれぞれのスラッシュ文字を path::preferred_separator に置き換えます。
4) それぞれのドットおよびその直後のディレクトリ区切り文字を削除します。
5) それぞれのドット-ドットでないファイル名の直後に続くディレクトリ区切り文字およびドット-ドットを、その直後のディレクトリ区切り文字と共に削除します。
6) ルートディレクトリが存在する場合、その直後のすべてのドット-ドットおよびあらゆるディレクトリ区切り文字を削除します。
7) 最後のファイル名がドット-ドットの場合、あらゆる末尾のディレクトリ区切り文字を削除します。
8) パスが空であれば、ドットを追加します (./ の正規形は . です)。

パスは begin() および end() 関数から返されるイテレータを通して、要素単位でトラバースできます。 これはパスを汎用形式で表示し、ルート名、ルートディレクトリ、および後続のファイル名要素を反復します (ルートディレクトリを表すものを除いて、ディレクトリ区切り文字はスキップされます)。 パス内の一番最後の要素がディレクトリ区切り文字の場合、最後のイテレータは空要素を逆参照します。

path のあらゆる非 const メンバの呼び出しは、そのオブジェクトの要素を参照しているすべてのイテレータを無効化します。

上で述べられている移植性のある汎用の構文と異なるネイティブな構文を OS が使用する場合、「検出された形式」を受理するとして定義されているライブラリ関数は、両方の形式のパス名を受理します。 検出された形式の引数は、汎用形式にマッチするけれども OS のネイティブなパスとしては受理できない場合に限り、汎用形式として扱われます。 ディレクトリ名のパスとファイル名のパスの間でネイティブ形式が異なるような OS では、汎用パスは区切り文字で終わっている場合はディレクトリパスとして扱われ、そうでなければ普通のファイルとして扱われます。

いずれの場合でも、 path クラスはパス名をネイティブ形式で格納し、必要に応じて汎用形式に自動的に変換するかのように振る舞います (メンバ関数はそれぞれパスをいずれの形式で解釈するかを規定しています)。

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

パスは std::basic_string との間でお互い暗黙に変換可能であり、ファイル API、例えば std::ifstream::open の引数としてそれらを使用することを可能としています。

目次

[編集] メンバ型と定数

定義
value_type ファイルシステムのネイティブエンコーディングに使用される文字型。 POSIX では char、 Windows では wchar_t
string_type std::basic_string<value_type>
const_iterator value_typepath の const な LegacyBidirectionalIterator。 ただし a == b である逆参照可能な path::iterator 型のイテレータ a および b に対して、 *a*b が同じオブジェクトを参照することは要求されません。
iterator const_iterator のエイリアス
パス名の文字列表現をどのように解釈するかを指定します。

以下の列挙子が定義されています。

定数 説明
native_format ネイティブなパス名の形式
generic_format 汎用のパス名の形式
auto_format 処理系定義の形式、可能であれば自動検出

(列挙)

[編集] メンバ定数

constexpr value_type preferred_separator
[静的]
移植性のある / に加えて使用することができる代替ディレクトリ区切り文字。 Windows ではバックスラッシュ文字 \ です。 POSIX では、移植性のある区切り文字と同じフォワードスラッシュ / です。
(パブリック静的メンバ定数) [edit]

[編集] メンバ関数

path を構築します
(パブリックメンバ関数) [edit]
path オブジェクトを破棄します
(パブリックメンバ関数) [edit]
別のパスを代入します
(パブリックメンバ関数) [edit]
内容を代入します
(パブリックメンバ関数) [edit]
連結
パスに要素をディレクトリ区切り文字付きで追加します
(パブリックメンバ関数) [edit]
ディレクトリ区切り文字を付けずに2つのパスを連結します
(パブリックメンバ関数) [edit]
変更
内容を消去します
(パブリックメンバ関数) [edit]
ディレクトリ区切り文字を推奨ディレクトリ区切り文字に変換します
(パブリックメンバ関数) [edit]
パスのファイル名部分を削除します
(パブリックメンバ関数) [edit]
パスの最後の要素を別のパスに置換します
(パブリックメンバ関数) [edit]
拡張子を置換します
(パブリックメンバ関数) [edit]
2つのパスを入れ替えます
(パブリックメンバ関数) [edit]
形式
パスのネイティブバージョンを返します
(パブリックメンバ関数) [edit]
文字列に変換されたネイティブパス名形式のパスを返します
(パブリックメンバ関数) [edit]
文字列に変換された汎用パス名形式のパスを返します
(パブリックメンバ関数) [edit]
比較
2つのパスの字句的表現を辞書的に比較します
(パブリックメンバ関数) [edit]
生成
パスを正規形に変換します
パスを相対形に変換します
パスを近接形に変換します
(パブリックメンバ関数) [edit]
分解
もしあれば、パスのルート名を返します
(パブリックメンバ関数) [edit]
もしあれば、パスのルートディレクトリを返します
(パブリックメンバ関数) [edit]
もしあれば、パスのルートパスを返します
(パブリックメンバ関数) [edit]
ルートパスからの相対パスを返します
(パブリックメンバ関数) [edit]
パスの親パスを返します
(パブリックメンバ関数) [edit]
パスのファイル名部分を返します
(パブリックメンバ関数) [edit]
パスの語幹部分を返します
(パブリックメンバ関数) [edit]
パスのファイル拡張子部分を返します
(パブリックメンバ関数) [edit]
問い合わせ
パスが空かどうか調べます
(パブリックメンバ関数) [edit]
対応するパスの要素が空かどうか調べます
(パブリックメンバ関数) [edit]
root_path() がファイルシステムの位置を一意に識別するかどうか調べます
(パブリックメンバ関数) [edit]
イテレータ
要素の並びとしてのパスへのイテレータアクセス
(パブリックメンバ関数) [edit]

[編集] 非メンバ関数

2つのパスを入れ替えます
(関数) [edit]
path オブジェクトに対するハッシュ値を計算します
(関数) [edit]
2つのパスを辞書的に比較します
(関数) [edit]
2つのパスをディレクトリ区切り文字付きで連結します
(関数) [edit]
パスに対するストリーム入出力を行います
(関数) [edit]
(C++17)(C++20で非推奨)
UTF-8 エンコードされた文字列から path を作成します
(関数) [edit]