namespace std::filesystem {
class path;
}
概要
path
は、ファイルシステムのパスを表すクラスである。このクラスは、パスに関して以下のような機能を持つ:
- パスの連結 (
"a"
もしくは"a/"
ディレクトリと"b.txt"
ファイル名を連結して"a/b.txt"
パスとする) - パスに含まれるディレクトリ、ファイル名、拡張子などの抽出
- 文字コード変換
- パス区切り文字の変換
- その他、文字列レベルのパス変換
このクラス自体は、ファイルシステムを操作しない。
メンバ関数
構築・破棄
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | C++17 |
~path(); |
デストラクタ | C++17 |
operator= |
代入演算子 | C++17 |
assign |
代入 | C++17 |
パスの加算・追加
名前 | 説明 | 対応バージョン |
---|---|---|
operator/= |
パス要素を加算する | C++17 |
append |
パス要素を加算する | C++17 |
operator+= |
パス文字列を加算する | C++17 |
concat |
パス文字列を加算する | C++17 |
パスの変更
名前 | 説明 | 対応バージョン |
---|---|---|
clear |
パスを空にする | C++17 |
make_preferred |
ディレクトリの区切り文字を推奨する形式に変換する | C++17 |
remove_filename |
パスからファイル名を除去する | C++17 |
replace_filename |
パスに含まれるファイル名を置き換える | C++17 |
replace_extension |
パスに含まれる拡張子を置き換える | C++17 |
swap |
他のpath オブジェクトとデータを入れ替える |
C++17 |
システムのパスフォーマット
名前 | 説明 | 対応バージョン |
---|---|---|
native |
システムの文字コードとしてパス文字列を取得する | C++17 |
c_str |
システムの文字コードとしてC言語の文字列表現を取得する | C++17 |
operator string_type |
システムの文字コードとして文字列型に変換する | C++17 |
string |
システムのマルチバイト文字コードとしてパス文字列を取得する | C++17 |
wstring |
システムのワイド文字コードとしてパス文字列を取得する | C++17 |
u8string |
UTF-8エンコードとしてパス文字列を取得する | C++17 |
u16string |
UTF-16エンコードでパス文字列を取得する | C++17 |
u32string |
UTF-32エンコードでパス文字列を取得する | C++17 |
システム非依存のパスフォーマット
名前 | 説明 | 対応バージョン |
---|---|---|
generic_string |
システムのマルチバイト文字コードとして、環境非依存パスフォーマットのパス文字列を取得する | C++17 |
generic_wstring |
システムのワイド文字コードとして、環境非依存パスフォーマットのパス文字列を取得する | C++17 |
generic_u8string |
UTF-8エンコードで、環境非依存パスフォーマットのパス文字列を取得する | C++17 |
generic_u16string |
UTF-16エンコードで、環境非依存パスフォーマットのパス文字列を取得する | C++17 |
generic_u32string |
UTF-32エンコードで、環境非依存パスフォーマットのパス文字列を取得する | C++17 |
比較
名前 | 説明 | 対応バージョン |
---|---|---|
compare |
他のパスと、各パス要素を辞書順で比較する | C++17 |
抽出
名前 | 説明 | 対応バージョン |
---|---|---|
root_name |
ルート名を取得する | C++17 |
root_directory |
ルートディレクトリを取得する | C++17 |
root_path |
ルートパスを取得する | C++17 |
relative_path |
ルートパスからの相対パスを取得する | C++17 |
parent_path |
親のパスを取得する | C++17 |
filename |
ファイル名を取得する | C++17 |
stem |
拡張子を除いたファイル名を取得する | C++17 |
extension |
拡張子を取得する | C++17 |
パス情報の判定
名前 | 説明 | 対応バージョン |
---|---|---|
empty |
パスが空か判定する | C++17 |
has_root_name |
ルート名が含まれているか判定する | C++17 |
has_root_directory |
ルートディレクトリが含まれているか判定する | C++17 |
has_root_path |
ルートパスが含まれているか判定する | C++17 |
has_relative_path |
ルートパスからの相対パスが含まれているか判定する | C++17 |
has_parent_path |
親のパスが含まれているか判定する | C++17 |
has_filename |
ファイル名が含まれているか判定する | C++17 |
has_stem |
拡張子を除いたファイル名が含まれているか判定する | C++17 |
has_extension |
拡張子が含まれているか判定する | C++17 |
is_absolute |
絶対パスかを判定する | C++17 |
is_relative |
相対パスかを判定する | C++17 |
文字列レベルのパス生成
名前 | 説明 | 対応バージョン |
---|---|---|
lexically_normal |
文字列レベルで正規化する | C++17 |
lexically_relative |
文字列レベルで相対パスに変換する | C++17 |
lexically_proximate |
文字列レベルで相対パスに変換する | C++17 |
イテレータ
名前 | 説明 | 対応バージョン |
---|---|---|
begin |
ディレクトリ区切りした各パス要素のうち、先頭要素を指すイテレータを取得する | C++17 |
end |
ディレクトリ区切りした各パス要素のうち、末尾要素の次を指すイテレータを取得する | C++17 |
メンバ型
名前 | 説明 | 対応バージョン |
---|---|---|
value_type |
パスを表現するシステム依存のエンコード文字型。 POSIXベースのシステムでは char Windowsベースのシステムでは wchar_t |
C++17 |
string_type |
パス文字列型 basic_string<value_type> |
C++17 |
format |
パスフォーマットの列挙型 | C++17 |
iterator |
ディレクトリ区切りの要素を走査するイテレータ | C++17 |
const_iterator |
iterator の別名 |
C++17 |
メンバ定数
名前 | 説明 | 対応バージョン |
---|---|---|
static constexpr value_type preferred_separator |
推奨するディレクトリ区切り文字。 POSIXベースのシステムではスラッシュ ( '/' ) Windowsベースのシステムではバックスラッシュ ( L'\\' ) |
C++17 |
非メンバ関数
一般関数
名前 | 説明 | 対応バージョン |
---|---|---|
swap |
2つのpath オブジェクトを入れ替える |
C++17 |
hash_value |
パスのハッシュ値を取得する | C++17 |
比較演算子
名前 | 説明 | 対応バージョン |
---|---|---|
operator== |
等値比較 | C++17 |
operator!= |
非等値比較 | C++17 |
operator<=> |
三方比較 | C++20 |
operator< |
左辺が右辺より小さいかの判定を行う | C++17 |
operator<= |
左辺が右辺以下かの判定を行う | C++17 |
operator> |
左辺が右辺より大きいかの判定を行う | C++17 |
operator>= |
左辺が右辺以上かの判定を行う | C++17 |
パスの連結
名前 | 説明 | 対応バージョン |
---|---|---|
operator/ |
2つのパスを連結する | C++17 |
入出力
名前 | 説明 | 対応バージョン |
---|---|---|
operator<< |
ストリームへの出力 | C++17 |
operator>> |
ストリームからの入力 | C++17 |
生成関数
名前 | 説明 | 対応バージョン |
---|---|---|
u8path |
UTF-8エンコードされた文字列からパスオブジェクトを構築する | C++17 C++20で非推奨 |
文字列フォーマットサポート
名前 | 説明 | 対応バージョン |
---|---|---|
formatter |
std::formatter クラスの特殊化 |
C++26 |
例
POSIXベースシステムの例
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path p = "/a/b/c.txt";
// パスから、ファイル名を除いたディレクトリ、ファイル名、
// 拡張子を除いたファイル名、拡張子を抽出
std::cout << "directory : " << p.parent_path() << std::endl;
std::cout << "filename : " << p.filename() << std::endl;
std::cout << "stem : " << p.stem() << std::endl;
std::cout << "extension : " << p.extension() << std::endl;
// パスが絶対パスか相対パスか判定
if (p.is_absolute()) {
std::cout << p << "は絶対パス" << std::endl;
}
else {
std::cout << p << "は相対パス" << std::endl;
}
}
出力
directory : "/a/b"
filename : "c.txt"
stem : "c"
extension : ".txt"
"/a/b/c.txt"は絶対パス
Windowsの例
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path p = "C:/a\\b/c.txt";
// パスから、ファイル名を除いたディレクトリ、ファイル名、
// 拡張子を除いたファイル名、拡張子を抽出
std::cout << "directory : " << p.parent_path() << std::endl;
std::cout << "filename : " << p.filename() << std::endl;
std::cout << "stem : " << p.stem() << std::endl;
std::cout << "extension : " << p.extension() << std::endl;
// システム依存のパスフォーマットと、システム非依存のパスフォーマット
std::wcerr << "native format : " << p.native() << std::endl;
std::cout << "generic format : " << p.generic_string() << std::endl;
// パスが絶対パスか相対パスか判定
if (p.is_absolute()) {
std::cout << p << "は絶対パス" << std::endl;
}
else {
std::cout << p << "は相対パス" << std::endl;
}
}
出力
directory : "C:/a\\b"
filename : "c.txt"
stem : "c"
extension : ".txt"
native format : C:/a\b/c.txt
generic format : C:/a/b/c.txt
"C:/a\\b/c.txt"は絶対パス
バージョン
言語
- C++17
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- ICC: ??
- Visual C++: 2017 Update 7 ✅