path

path 类存储类型为 string_type 的对象,在这里出于阐释目的将其称为 myname,它适合用作路径名称。 string_typebasic_string<value_type> 的同义词,其中在 Windows 上,value_typewchar_t 的同义词,在 POSIX 上,它是 char 的同义词。

有关详细信息和代码示例,请参阅文件系统导航 (C++)

语法

class path;

构造函数

构造函数 说明
path 构造一个 path

Typedef

类型名称 说明
const_iterator iterator 的同义词。
iterator 一个双向常量迭代器,用于指定 mynamepath 组件。
string_type 类型是 basic_string<value_type> 的同义词。

成员函数

成员函数 说明
append 将指定序列追加到 mypath(按需进行转将换和插入 preferred_separator)。
assign mypath 替换为指定的序列(按需进行转换)。
begin 返回 path::iterator,它指示路径名称中的第一个路径元素(若存在)。
c_str 返回指向 mypath 中第一个字符的指针。
clear 执行 mypath.clear()
compare 返回比较值。
concat 将指定序列追加到 mypath(按需进行转将换,但不插入分隔符)。
empty 返回 mypath.empty()
end 返回类型 iterator 的序列末迭代器。
extension 返回 filename() 的前缀。
filename 返回 myname 的根目录组件,尤其是 empty() ? path() : *--end()。 组件可能为空。
generic_string 返回 this->string<Elem, Traits, Alloc>(al) ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。
generic_u16string 返回 u16string() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。
generic_u32string 返回 u32string() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。
generic_u8string 返回 u8string() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。
generic_wstring 返回 wstring() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。
has_extension 返回 !extension().empty()
has_filename 返回 !filename().empty()
has_parent_path 返回 !parent_path().empty()
has_relative_path 返回 !relative_path().empty()
has_root_directory 返回 !root_directory().empty()
has_root_name 返回 !root_name().empty()
has_root_path 返回 !root_path().empty()
has_stem 返回 !stem().empty()
is_absolute 对于 Windows,该函数返回 has_root_name() && has_root_directory()。 对于 POSIX,该函数返回 has_root_directory()
is_relative 返回 !is_absolute()
make_preferred 根据需要,将每个分隔符转换为 preferred_separator
native 返回路径的本机表示形式。
parent_path 返回 myname 的父路径组件。
preferred_separator 常量对象提供首选字符来分隔路径组件,具体取决于主机操作系统。
relative_path 返回 myname 的相对路径组件。
remove_filename 移除文件名。
replace_extension 替换 myname 的扩展名。
replace_filename 替换文件名。
root_directory 返回 myname 的根目录组件。
root_name 返回 myname 的根名称组件。
root_path 返回 myname 的根路径组件。
stem 返回 mynamestem 组件。
string 转换 mypath 中存储的序列。
swap 执行 swap(mypath, right.mypath)
u16string mypath 中存储的序列转换为 UTF-16,并将其返回存储到类型 u16string 的对象中。
u32string mypath 中存储的序列转换为 UTF-32,并将其返回存储到类型 u32string 的对象中。
u8string mypath 中存储的序列转换为 UTF-8,并将其返回存储到类型 u8string 的对象中。
value_type 类型描述了主机操作系统偏好的路径元素。
wstring mypath 中存储的序列转换为 wchar_t 序列的主机系统偏好的编码,并将其返回存储到类型 wstring 的对象中。

运算符

运算符 说明
operator= 用另一个路径的副本替换路径中的元素。
operator+= 各种 concat 表达式。
operator/= 各种 append 表达式。
operator string_type 返回 myname

要求

标头<filesystem>

命名空间std::experimental::filesystem

path::append

将指定序列追加到 mypath(按需进行转将换和插入 preferred_separator)。

template <class Source>
path& append(const Source& source);

template <class InIt>
path& append(InIt first, InIt last);

参数

source
指定的序列。

first
指定序列的开头。

last
指定序列的末尾。

path::assign

mypath 替换为指定的序列(按需进行转换)。

template <class Source>
path& assign(const Source& source);

template <class InIt>
path& assign(InIt first, InIt last);

参数

source
指定的序列。

first
指定序列的开头。

last
指定序列的末尾。

path::begin

返回 path::iterator,它指示路径名称中的第一个路径元素(若存在)。

iterator begin() const;

path::c_str

返回指向 mypath 中第一个字符的指针。

const value_type& *c_str() const noexcept;

path::clear

执行 mypath.clear()

void clear() noexcept;

path::compare

第一个函数返回 mypath.compare(pval.native())。 第二个函数返回 mypath.compare(str)。 第三个函数返回 mypath.compare(ptr)

int compare(const path& pval) const noexcept;
int compare(const string_type& str) const;
int compare(const value_type *ptr) const;

参数

pval
要比较的路径。

str
要比较的字符串。

ptr
要比较的指针。

path::concat

将指定序列追加到 mypath(按需进行转将换,但不插入分隔符)。

template <class Source>
path& concat(const Source& source);

template <class InIt>
path& concat(InIt first, InIt last);

参数

source
指定的序列。

first
指定序列的开头。

last
指定序列的末尾。

path::const_iterator

iterator 的同义词。

typedef iterator const_iterator;

path::empty

返回 mypath.empty()

bool empty() const noexcept;

path::end

返回类型 iterator 的序列末迭代器。

iterator end() const;

path::extension

返回 filename() 的前缀。

path extension() const;

备注

返回 filename() X 的前缀,例如:

如果 X == path(".") || X == path(".."),或者 X 不包含任何点,则前缀为空。

否则,前缀以最右侧的点开头(并将其包含在内)。

path::filename

返回 myname 的根目录组件,尤其是 empty() path() : *--end()。 组件可能为空。

path filename() const;

path::generic_string

返回 this->string<Elem, Traits, Alloc>(al) ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。

template <class Elem,
    class Traits = char_traits<Elem>,
    class Alloc = allocator<Elem>>
  basic_string<Elem, Traits, Alloc>
    generic_string(const Alloc& al = Alloc()) const;

string generic_string() const;

path::generic_u16string

返回 u16string() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。

u16string generic_u16string() const;

path::generic_u32string

返回 u32string() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。

u32string generic_u32string() const;

path::generic_u8string

返回 u8string() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。

string generic_u8string() const;

path::generic_wstring

返回 wstring() ,其中(在 Windows 下)任何反斜杠均转换为正斜杠。

wstring generic_wstring() const;

path::has_extension

返回 !extension().empty()

bool has_extension() const;

path::has_filename

返回 !filename().empty()

bool has_filename() const;

path::has_parent_path

返回 !parent_path().empty()

bool has_parent_path() const;

path::has_relative_path

返回 !relative_path().empty()

bool has_relative_path() const;

path::has_root_directory

返回 !root_directory().empty()

bool has_root_directory() const;

path::has_root_name

返回 !root_name().empty()

bool has_root_name() const;

path::has_root_path

返回 !root_path().empty()

bool has_root_path() const;

path::has_stem

返回 !stem().empty()

bool has_stem() const;

path::is_absolute

对于 Windows,该函数返回 has_root_name() && has_root_directory()。 对于 POSIX,该函数返回 has_root_directory()

bool is_absolute() const;

path::is_relative

返回 !is_absolute()

bool is_relative() const;

path::iterator

一个双向常量迭代器,用于指定 myname 的路径组件。

class iterator
   {
   // bidirectional iterator for path
   typedef bidirectional_iterator_tag iterator_category;
   typedef path_type value_type;
   typedef ptrdiff_t difference_type;
   typedef const value_type *pointer;
   typedef const value_type& reference;
   // ...
   };

备注

此类描述了一个双向常量迭代器,该迭代器指定序列中 mynamepath 组件:

  1. 根名称(如存在)

  2. 根目录(如存在)

  3. 父级 path 的剩余目录元素(如存在),它们以 filename 结尾(如存在)

对于 pvalpath 类型的对象:

  1. path::iterator X = pval.begin() 指定 pathname 中的第一个 path 元素(若存在)。

  2. 如果 X 点刚超出组件序列的末尾,X == pval.end()true

  3. *X 会返回与当前组件匹配的字符串

  4. ++X 指定序列中的下一个组件(如果存在)。

  5. --X 指定序列中的前面的组件(如果存在)。

  6. 更改 myname 会使所有指定 myname 中的元素的迭代器无效。

path::make_preferred

根据需要,将每个分隔符转换为 preferred_separator

path& make_preferred();

path::native

获取路径的本机字符串表示形式。

const string_type& native() const noexcept;

备注

该路径以可移植泛型格式(见 generic_string())或路径的本机格式提供。 此函数返回本机字符串。 在 POSIX 系统上,泛型格式和本机格式相同。

在 Windows 11 上运行的以下示例中,泛型路径字符串为 c:/t/temp/temp.txt,本机字符串为 c:\\t\\temp.txt

// Compile with /std:c++17 or higher
#include <filesystem>

int main()
{
    std::filesystem::path p(R"(c:\t\temp.txt)");
    auto native = p.native(); // Windows: L"c:\\t\temp.txt"
    auto generic = p.generic_string(); // Windows: "c:/t/temp.txt"
}

path::operator=

用另一个路径的副本替换路径中的元素。

path& operator=(const path& right);
path& operator=(path&& right) noexcept;

template <class Source>
path& operator=(const Source& source);

参数

right
要复制到 path 中的 path

source
path

注解

第一个成员运算符将 right.myname 复制到 myname。 第二个成员运算符将 right.myname 移动到 myname。 第三个成员函数的行为与 *this = path(source) 相同。

path::operator+=

各种 concat 表达式。

path& operator+=(const path& right);
path& operator+=(const string_type& str);
path& operator+=(const value_type *ptr);
path& operator+=(value_type elem);

template <class Source>
path& operator+=(const Source& source);

template <class Elem>
path& operator+=(Elem elem);

参数

right
添加的路径。

str
添加的字符串。

ptr
添加的指针。

elem
添加的 value_typeElem

source
添加的源。

注解

成员函数的行为与以下相应表达式相同:

  1. concat(right);

  2. concat(path(str));

  3. concat(ptr);

  4. concat(string_type(1, elem));

  5. concat(source);

  6. concat(path(basic_string<Elem>(1, elem)));

path::operator/=

各种 append 表达式。

path& operator/=(const path& right);

template <class Source>
path& operator/=(const Source& source);

参数

right
添加的路径。

source
添加的源。

注解

成员函数的行为与以下相应表达式相同:

  1. append(right);

  2. append(source);

path::operator string_type

返回 myname

operator string_type() const;

path::parent_path

返回 myname 的父路径组件。

path parent_path() const;

备注

返回 myname 的父路径组件,尤其是移除 filename().native()myname 的前缀和任何紧跟在前面的目录分隔符。 (同样,如果 begin() != end(),则是通过连续应用 operator/= 而在范围 [begin(), --end()) 中的所有元素的组合。)组件可为空。

path::path

以各种方式构造 path

path();

path(const path& right);
path(path&& right) noexcept;

template <class Source>
path(const Source& source);

template <class Source>
path(const Source& source, const locale& loc);

template <class InIt>
path(InIt first, InIt last);

template <class InIt>
path(InIt first, InIt last, const locale& loc);

参数

right
所构造路径要作为其副本的路径。

source
所构造路径要作为其副本的源。

loc
指定的区域设置。

first
要复制的第一个元素的位置。

last
要复制的最后一个元素的位置。

注解

构造函数以各种方式构造 myname

对于 path(),它是 myname()

对于 path(const path& right,它是 myname(right.myname)

对于 path(path&& right),它是 myname(right.myname)

对于 template<class Source> path(const Source& source),它是 myname(source)

对于 template<class Source> path(const Source& source, const locale& loc),它是 myname(source),这从 loc 中获取任何需要的 codecvt facet。

对于 template<class InIt> path(InIt first, InIt last),它是 myname(first, last)

对于 template<class InIt> path(InIt first, InIt last, const locale& loc),它是 myname(first, last),这从 loc 中获取任何需要的 codecvt facet。

path::preferred_separator

常量对象提供首选字符来分隔路径组件,具体取决于主机操作系统。

#if _WIN32_C_LIB
static constexpr value_type preferred_separator == L'\\';
#else // assume POSIX
static constexpr value_type preferred_separator == '/';
#endif // filesystem model now defined

备注

在 Windows 下的大多数上下文中,同样允许在它的位置使用 L'/'

path::relative_path

返回 myname 的相对路径组件。

path relative_path() const;

备注

返回 myname 的相对路径组件,尤其是移除 root_path().native()myname 的前缀和任何紧随其后的冗余目录分隔符。 组件可能为空。

path::remove_filename

移除文件名。

path& remove_filename();

path::replace_extension

替换 myname 的扩展名。

path& replace_extension(const path& newext = path());

参数

newext
新扩展。

注解

首先,从 myname 中移除后缀 extension().native()。 如果 !newext.empty() && newext[0] != dot(其中 dot 是 ),则 dot 追加到 myname 中。*path(".").c_str() newext 被追加到 myname

path::replace_filename

替换文件名。

path& replace_filename(const path& pval);

参数

pval
文件名的路径。

备注

成员函数执行:

remove_filename();

*this /= pval;
return (*this);

path::root_directory

返回 myname 的根目录组件。

path root_directory() const;

备注

组件可能为空。

path::root_name

返回 myname 的根名称组件。

path root_name() const;

备注

组件可能为空。

path::root_path

返回 myname 的根路径组件。

path root_path() const;

备注

返回 myname 的根路径组件,尤其是 root_name() / root_directory。 组件可能为空。

path::stem

返回 mynamestem 组件。

path stem() const;

注解

返回 mynamestem 组件,尤其是 filename().native()(其中移除了任何尾随的 extension().native())。 组件可能为空。

path::string

转换 mypath 中存储的序列。

template \<class Elem, class Traits = char_traits\<Elem>, class Alloc = allocator\<Elem>>
basic_string\<Elem, Traits, Alloc> string(const Alloc& al = Alloc()) const;
string string() const;

备注

第一个(模板)成员函数按如下方式转换 mypath 中存储的序列:

  1. string<char, Traits, Alloc>(),表示集 string()

  2. string<wchar_t, Traits, Alloc>(),表示集 wstring()

  3. string<char16_t, Traits, Alloc>(),表示集 u16string()

  4. string<char32_t, Traits, Alloc>(),表示集 u32string()

第二个成员函数将 mypath 中存储的序列转换为 char 序列的主机系统偏好的编码,并将其返回存储到类型 string 的对象中。

path::string_type

类型是 basic_string<value_type> 的同义词。

typedef basic_string<value_type> string_type;

path::swap

执行 swap(mypath, right.mypath)

void swap(path& right) noexcept;

path::u16string

mypath 中存储的序列转换为 UTF-16,并将其返回存储到类型 u16string 的对象中。

u16string u16string() const;

path::u32string

mypath 中存储的序列转换为 UTF-32,并将其返回存储到类型 u32string 的对象中。

u32string u32string() const;

path::u8string

mypath 中存储的序列转换为 UTF-8,并将其返回存储到类型 u8string 的对象中。

string u8string() const;

path::value_type

该类型描述了主机操作系统偏好的 path 元素。

#if _WIN32_C_LIB
typedef wchar_t value_type;
#else // assume POSIX
typedef char value_type;
#endif // filesystem model now defined

path::wstring

mypath 中存储的序列转换为 wchar_t 序列的主机系统偏好的编码,并将其返回存储到类型 wstring 的对象中。

wstring wstring() const;

另请参阅

头文件引用