- filesystem[meta header]
- std::filesystem[meta namespace]
- class[meta id-type]
- cpp17[meta cpp]
namespace std::filesystem {
class path;
}
path
は、ファイルシステムのパスを表すクラスである。このクラスは、パスに関して以下のような機能を持つ:
- パスの連結 (
"a"
もしくは"a/"
ディレクトリと"b.txt"
ファイル名を連結して"a/b.txt"
パスとする)
- パスに含まれるディレクトリ、ファイル名、拡張子などの抽出
- 文字コード変換
- パス区切り文字の変換
- その他、文字列レベルのパス変換
このクラス自体は、ファイルシステムを操作しない。
名前 |
説明 |
対応バージョン |
compare |
他のパスと、各パス要素を辞書順で比較する |
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 |
名前 |
説明 |
対応バージョン |
u8path |
UTF-8エンコードされた文字列からパスオブジェクトを構築する |
C++17 C++20で非推奨 |
#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;
}
}
- p.parent_path()[link path/parent_path.md]
- p.filename()[link path/filename.md]
- p.stem()[link path/stem.md]
- p.extension()[link path/extension.md]
- p.is_absolute()[link path/is_absolute.md]
directory : "/a/b"
filename : "c.txt"
stem : "c"
extension : ".txt"
"/a/b/c.txt"は絶対パス
#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;
}
}
- p.parent_path()[link path/parent_path.md]
- p.filename()[link path/filename.md]
- p.stem()[link path/stem.md]
- p.extension()[link path/extension.md]
- p.native()[link path/native.md]
- p.generic_string()[link path/generic_string.md]
- p.is_absolute()[link path/is_absolute.md]
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"は絶対パス