Namespaces
Variants

std::filesystem:: u8path

From cppreference.net
Definido en el encabezado <filesystem>
template < class Source >
std:: filesystem :: path u8path ( const Source & source ) ;
(1) (desde C++17)
(obsoleto en C++20)
template < class InputIt >
std:: filesystem :: path u8path ( InputIt first, InputIt last ) ;
(2) (desde C++17)
(obsoleto en C++20)

Construye una ruta p a partir de una secuencia codificada en UTF-8 de char s o char8_t s (desde C++20) , proporcionada como un std::string , o como un std::string_view , o como una cadena multibyte terminada en nulo, o como un par de iteradores [ first, last ) .

  • Si path::value_type es char y la codificación nativa es UTF-8, construye una ruta directamente como si fuera mediante path ( source ) o path ( first, last ) . Nota: esta es la situación típica de un sistema POSIX que utiliza Unicode, como Linux.
  • De lo contrario, si path::value_type es wchar_t y la codificación nativa es UTF-16 (esta es la situación en Windows), o si path::value_type es char16_t (codificación nativa garantizada UTF-16) o char32_t (codificación nativa garantizada UTF-32), entonces primero convierte la secuencia de caracteres UTF-8 a una cadena temporal tmp de tipo path::string_type y luego la nueva ruta se construye como si fuera mediante path ( tmp ) .
  • De lo contrario (para codificaciones de caracteres estrechos no UTF-8 y para wchar_t no UTF-16), primero convierte la secuencia de caracteres UTF-8 a una cadena temporal codificada en UTF-32 tmp de tipo std:: u32string , y luego la nueva ruta se construye como si fuera mediante path ( tmp ) (esta ruta se toma en un sistema POSIX con un sistema de archivos codificado en multibyte o byte simple no Unicode).

Contenidos

Parámetros

source - una cadena std::string codificada en UTF-8, std::string_view , un puntero a una cadena multibyte terminada en nulo, o un iterador de entrada con tipo de valor char que apunta a una cadena multibyte terminada en nulo
first, last - par de LegacyInputIterator s que especifican una secuencia de caracteres codificada en UTF-8
Requisitos de tipo
-
InputIt debe cumplir con los requisitos de LegacyInputIterator .
-
El tipo de valor de Source o InputIt debe ser char o char8_t . (desde C++20)

Valor de retorno

La ruta construida a partir de la cadena de entrada después de la conversión de UTF-8 a la codificación de caracteres nativa del sistema de archivos.

Excepciones

Puede lanzar std::bad_alloc si la asignación de memoria falla.

Notas

En sistemas donde el formato de ruta nativo difiere del formato de ruta genérico (ni los sistemas Windows ni POSIX son ejemplos de tales sistemas operativos), si el argumento para esta función utiliza formato genérico, será convertido a nativo.

Ejemplo

#include <cstdio>
#ifdef _MSC_VER
#include <fcntl.h>
#include <io.h>
#else
#include <clocale>
#include <locale>
#endif
#include <filesystem>
#include <fstream>
int main()
{
#ifdef _MSC_VER
    _setmode(_fileno(stderr), _O_WTEXT);
#else
    std::setlocale(LC_ALL, "");
    std::locale::global(std::locale(""));
#endif
    std::filesystem::path p(u8"要らない.txt");
    std::ofstream(p) << "File contents"; // Prior to LWG2676 uses operator string_type()
                                         // on MSVC, where string_type is wstring, only
                                         // works due to non-standard extension.
                                         // Post-LWG2676 uses new fstream constructors
    // Native string representation can be used with OS-specific APIs
#ifdef _MSC_VER
    if (std::FILE* f = _wfopen(p.c_str(), L"r"))
#else
    if (std::FILE* f = std::fopen(p.c_str(), "r"))
#endif
    {
        for (int ch; (ch = fgetc(f)) != EOF; std::putchar(ch))
        {}
        std::fclose(f);
    }
    std::filesystem::remove(p);
}

Salida posible:

File contents

Véase también

(C++17)
representa una ruta
(clase)