Namespaces
Variants

std::filesystem::path::string, std::filesystem::path::wstring, std::filesystem::path::u8string, std::filesystem::path::u16string, std::filesystem::path::u32string

От ru.cppreference.net
 
 
 
 
template< class CharT, class Traits = std::char_traits<CharT>,
          class Alloc = std::allocator<CharT> >
std::basic_string<CharT,Traits,Alloc>
    string( const Alloc& a = Alloc() ) const;
(1) (начиная с C++17)
std::string string() const;
(2) (начиная с C++17)
std::wstring wstring() const;
(3) (начиная с C++17)
std::u16string u16string() const;
(4) (начиная с C++17)
std::u32string u32string() const;
(5) (начиная с C++17)
std::string u8string() const;
(6) (начиная с C++17)
(до C++20)
std::u8string u8string() const;
(начиная с C++20)

Возвращает внутреннее имя пути в родном формате пути, преобразованное в конкретный строковый тип. Преобразование, если оно производится, выполняется следующим образом:

  • Если path::value_type является char, преобразование, если оно происходит, зависит от системы. Так обстоит дело в типичных системах POSIX (например, Linux), где родная кодировка — UTF-8 и string() не выполняет преобразования.
  • В противном случае, если path::value_type является wchar_t, преобразование, если оно происходит, не определено. Так обстоит дело в Windows, где wchar_t является 16-битным и родная кодировка — UTF-16.
  • В противном случае, если path::value_type является char16_t, родная кодировка — UTF-16 и метод преобразования не определён.
  • В противном случае, если path::value_type является char32_t, родная кодировка — UTF-32 и метод преобразования не определён.
  • В противном случае, если path::value_type является char8_t, родная кодировка — UTF-8 и метод преобразования не определён.
1) Все выделения памяти выполняются с помощью a.
6) Кодировка результата в случае u8string() всегда UTF-8.

Возвращаемое значение

Внутреннее имя пути в формате собственного имени пути, преобразованное в указанный строковый тип.

Исключения

Может генерировать исключения, определяемые реализацией.

Пример

#include <clocale>
#include <cstdio>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <locale>
int main()
{
    const char* const localeName = "ja_JP.utf-8";
    std::setlocale(LC_ALL, localeName);
    std::locale::global(std::locale(localeName));
    const std::filesystem::path p(u8"要らない.txt");
    std::ofstream(p) << "File contents";
    // нативное строковое представление может использоваться с API операционной системы
    if (std::FILE* const f = std::fopen(p.string().c_str(), "r"))
    {
        for (int ch; (ch = std::fgetc(f)) != EOF;)
            std::putchar(ch);
        std::fclose(f);
    }
    // многобайтовое и широкое представление может использоваться для вывода
    std::cout << "\nFile name in narrow multibyte encoding: " << p.string() << '\n';
    // wstring() будет выбрасывать исключение в stdlibc++ (по состоянию на gcc-12.1.0), см.:
    // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95048
    // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102839
    // работает с более новыми gcc-12.2.1 (2023/02/01) и clang-10+
    std::wcout << "File name in wide encoding: " << p.wstring() << '\n';
    std::filesystem::remove(p);
}

Возможный вывод:

File contents
File name in narrow multibyte encoding: 要らない.txt
File name in wide encoding: 要らない.txt

Смотрите также

возвращает путь в общем формате имени пути, преобразованный в строку
(публичная функция-член)