Namespaces
Variants

std::filesystem::path:: make_preferred

From cppreference.net
path & make_preferred ( ) ;
(C++17以降)

パスのジェネリック形式ビュー内のすべてのディレクトリ区切り文字を、優先されるディレクトリ区切り文字に変換します。

例えば、Windowsでは \ が優先される区切り文字であるため、パス foo / bar foo\bar に変換されます。

目次

パラメータ

(なし)

戻り値

* this

例外

実装定義の例外をスローする可能性があります。

Windowsは / をセパレータとして使用できますが、 \ を優先するため、 make_preferred はスラッシュをバックスラッシュに変換します。一方、POSIXではバックスラッシュは有効なファイル名文字であるため、 \ をセパレータとして使用しません — POSIX上のWindowsパスは実際には "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 path: "
        << windows_path << " -> "
        << windows_path.make_preferred() << '\n'
        << "POSIX path: "
        << posix_path << " -> "
        << posix_path.make_preferred() << '\n';
}

出力:

// on Windows
Windows path: "a\\b\\c" -> "a\\b\\c"
POSIX path: "a/b/c" -> "a\\b\\c"
// on POSIX
Windows path: "a\\b\\c" -> "a\\b\\c"
POSIX path: "a/b/c" -> "a/b/c"

関連項目

constexpr value_type preferred_separator
[static]
ポータブルな / に加えて使用可能な代替ディレクトリセパレータ。Windowsでは、これはバックスラッシュ文字 \ です。POSIXでは、これはポータブルセパレータと同じフォワードスラッシュ / です。
(public static member constant)