std::filesystem::path::make_preferred

来自cppreference.com
< cpp‎ | filesystem‎ | path
 
 
 
 
path& make_preferred();
(C++17 起)

将路径的通用格式视图中的所有目录分隔符转换成首选目录分隔符。

例如,在 Windows 上 \ 是首选分隔符,foo/bar 将被转换为 foo\bar

参数

(无)

返回值

*this

异常

可能会抛出由实现定义的异常。

示例

Windows 可以用 / 为分隔符,但首选 \,因此 make_preferred 会将前向斜杠转换为反斜杠。另一方面,POSIX 不使用 \ 作为分隔符,因为反斜杠是合法的文件名字符——Windows 路径在 POSIX 上实际上会指代名字为 "a\\b\\c" 的文件。由于这个原因,不转换其“分隔符”。

#include <filesystem>
#include <iostream>
 
int main()
{
    std::filesystem::path
        windows_path("a\\b\\c"),
        posix_path("a/b/c");
 
    std::cout
        << "Windows 路径: "
        << windows_path << " -> "
        << windows_path.make_preferred() << '\n'
        << "POSIX 路径: "
        << posix_path << " -> "
        << posix_path.make_preferred() << '\n';
}

输出:

// Windows 上
Windows 路径: "a\\b\\c" -> "a\\b\\c"
POSIX 路径: "a/b/c" -> "a\\b\\c"
 
// POSIX 上
Windows 路径: "a\\b\\c" -> "a\\b\\c"
POSIX 路径: "a/b/c" -> "a/b/c"

参阅

constexpr value_type preferred_separator
[静态]
在可移植的 / 之外可用的另一种目录分隔符。Windows 上它是反斜杠字符 \。POSIX 上它是与可移植分隔符相同的斜杠 /
(公开静态成员常量)