- filesystem[meta header]
- std::filesystem[meta namespace]
- path[meta class]
- function[meta id-type]
- cpp17[meta cpp]
bool is_absolute() const;
パスが絶対パスかを判定する。
絶対パスとは、追加の開始位置を必要とせずに、曖昧さなく特定の場所の場所を参照できるパスのことである。その定義はOSに依存する。
パスが絶対パスであればtrue
、そうでなければfalse
を返す。
- POSIXとWindowsはどちらも、ルートディレクトリがパスに含まれていれば、絶対パスと見なせる。カレントディレクトリや親ディレクトリの参照が含んでいても絶対パスと判断される
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path ps[] = {
"/", // ルートパスのみ
"/foo/bar.txt", // ルートパスを含む
"/foo/../bar.txt", // ルートパスに加えて、親ディレクトリの参照を含む
"foo/bar.txt" // ルートパスを含まない
};
std::cout << std::boolalpha;
for (const fs::path& p : ps) {
std::cout << p << " : " << p.is_absolute() << std::endl;
}
}
- is_absolute()[color ff0000]
"/" : true
"/foo/bar.txt" : true
"/foo/../bar.txt" : true
"foo/bar.txt" : false
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path ps[] = {
"C:", // ルート名のみ
"C:/", // ルートパスのみ
"C:/foo/bar.txt", // ルートパスを含む
"C:/foo/../bar.txt", // ルートパスに加えて、親ディレクトリの参照を含む
"foo/bar.txt", // ルートパスを含まない
"C:foo", // ルート名はあるがルートディレクトリはない
"/foo" // ルートディレクトリはあるがルート名はない
};
std::cout << std::boolalpha;
for (const fs::path& p : ps) {
std::cout << p << " : " << p.is_absolute() << std::endl;
}
}
- is_absolute()[color ff0000]
"C:" : false
"C:/" : true
"C:/foo/bar.txt" : true
"C:/foo/../bar.txt" : true
"foo/bar.txt" : false
"C:foo" : false
"/foo" : false
- C++17
- Clang:
- GCC: 8.1 [mark verified]
- Visual C++: 2017 Update 7 [mark verified]