30 Input/output library [input.output]

30.10 File systems [filesystems]

30.10.27 Class path [fs.class.path]

30.10.27.4 path members [fs.path.member]

30.10.27.4.1 path constructors [fs.path.construct]

path() noexcept;

Effects: Создает объект класса path.

Postconditions: empty() == true.

path(const path& p); path(path&& p) noexcept;

Effects: Создает объект класса, path имеющий тот же путь в собственном и универсальном форматах, соответственно, что и исходное значение p. Во второй форме p остается в допустимом, но неуказанном состоянии.

path(string_type&& source, format fmt = auto_format);

Effects: Создает объект класса, path для которого имя пути в обнаруженном формате source имеет исходное значение source ([fs.path.fmt.cvt]), преобразовывая формат, если требуется ([fs.path.fmt.cvt]). source остается в допустимом, но неуказанном состоянии.

template <class Source> path(const Source& source, format fmt = auto_format); template <class InputIterator> path(InputIterator first, InputIterator last, format fmt = auto_format);

Effects: Позвольте s быть эффективным диапазоном source ([fs.path.req]) или диапазоном [first, last)с преобразованной кодировкой, если требуется ([fs.path.cvt]). Находит обнаруженный формат s ([fs.path.fmt.cvt]) и создает объект класса, path для которого задан путь в этом формате s.

template <class Source> path(const Source& source, const locale& loc, format fmt = auto_format); template <class InputIterator> path(InputIterator first, InputIterator last, const locale& loc, format fmt = auto_format);

Requires: Тип значения Source и InputIterator есть char.

Effects: Позвольте s быть эффективным диапазоном source или диапазоном [first, last)после преобразования кодировки следующим образом:

  • Если value_­type есть wchar_­t, преобразуется в стандартную широкую кодировку ([fs.def.native.encode]) с использованием codecvt<​wchar_­t, char, mbstate_­t> аспекта loc.

  • В противном случае выполняется преобразование с использованием codecvt<wchar_­t, char, mbstate_­t> фасета loc, а затем выполняется второе преобразование в текущую узкую кодировку.

Находит обнаруженный формат s ([fs.path.fmt.cvt]) и создает объект класса, path для которого задан путь в этом формате s.

[ Example: Строка должна быть прочитана из базы данных, которая закодирована в ISO / IEC 8859-1, и использована для создания каталога:

namespace fs = std::filesystem;
std::string latin1_string = read_latin1_data();
codecvt_8859_1<wchar_t> latin1_facet;
std::locale latin1_locale(std::locale(), latin1_facet);
fs::create_directory(fs::path(latin1_string, latin1_locale));

Для операционных систем на основе POSIX путь создается путем использования сначала latin1_­facet для преобразования кодировки ISO / IEC 8859-1 latin1_­string в широкую символьную строку в собственной широкой кодировке ([fs.def.native.encode]). Полученная в результате широкая строка затем преобразуется в строку узкого символьного имени пути в текущей собственной узкой кодировке. Если собственная широкая кодировка - UTF-16 или UTF-32, а текущая собственная узкая кодировка - UTF-8, все символы в наборе символов ISO / IEC 8859-1 будут преобразованы в их представление Unicode, но для других в родных узких кодировках некоторые символы могут не иметь представления.

Для операционных систем на базе Windows путь создается с использованием latin1_­facet преобразования ISO / IEC 8859-1 latin1_­string в строку имени пути с расширенными символами в кодировке UTF-16. Все символы в наборе символов ISO / IEC 8859-1 будут преобразованы в их представление Unicode. ] end example