Namespaces
Variants

std::filesystem:: u8path

From cppreference.net
Défini dans l'en-tête <filesystem>
template < class Source >
std:: filesystem :: path u8path ( const Source & source ) ;
(1) (depuis C++17)
(obsolète en C++20)
template < class InputIt >
std:: filesystem :: path u8path ( InputIt first, InputIt last ) ;
(2) (depuis C++17)
(obsolète en C++20)

Construit un chemin p à partir d'une séquence encodée en UTF-8 de char s ou de char8_t s (depuis C++20) , fournie soit sous forme d'un std::string , soit sous forme d'un std::string_view , soit sous forme d'une chaîne multioctet terminée par un caractère nul, soit sous forme d'une paire d'itérateurs [ first, last ) .

  • Si path::value_type est char et que l'encodage natif est UTF-8, construit un chemin directement comme par path ( source ) ou path ( first, last ) . Remarque : c'est la situation typique d'un système POSIX utilisant Unicode, tel que Linux.
  • Sinon, si path::value_type est wchar_t et que l'encodage natif est UTF-16 (c'est le cas sous Windows), ou si path::value_type est char16_t (encodage natif garanti UTF-16) ou char32_t (encodage natif garanti UTF-32), alors convertit d'abord la séquence de caractères UTF-8 en une chaîne temporaire tmp de type path::string_type puis le nouveau chemin est construit comme par path ( tmp ) .
  • Sinon (pour les encodages de caractères étroits non UTF-8 et pour wchar_t non UTF-16), convertit d'abord la séquence de caractères UTF-8 en une chaîne encodée UTF-32 temporaire tmp de type std:: u32string , puis le nouveau chemin est construit comme par path ( tmp ) (ce chemin est emprunté sur un système POSIX avec un système de fichiers encodé en multioctet ou mono-octet non Unicode).

Table des matières

Paramètres

source - une chaîne std::string encodée en UTF-8, std::string_view , un pointeur vers une chaîne multioctet terminée par un caractère nul, ou un itérateur d'entrée avec un type de valeur char qui pointe vers une chaîne multioctet terminée par un caractère nul
first, last - paire d' LegacyInputIterator s qui spécifient une séquence de caractères encodée en UTF-8
Exigences de type
-
InputIt doit satisfaire aux exigences de LegacyInputIterator .
-
Le type de valeur de Source ou InputIt doit être char ou char8_t . (depuis C++20)

Valeur de retour

Le chemin construit à partir de la chaîne d'entrée après conversion de l'UTF-8 vers l'encodage de caractères natif du système de fichiers.

Exceptions

Peut lever std::bad_alloc si l'allocation de mémoire échoue.

Notes

Sur les systèmes où le format de chemin natif diffère du format de chemin générique (ni les systèmes Windows ni les systèmes POSIX ne sont des exemples de tels OS), si l'argument de cette fonction utilise le format générique, il sera converti en natif.

Exemple

#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);
}

Sortie possible :

File contents

Voir aussi

(C++17)
représente un chemin
(classe)