Namespaces
Variants

std::filesystem:: path

From cppreference.net
Défini dans l'en-tête <filesystem>
class path ;
(depuis C++17)

Les objets de type path représentent des chemins sur un système de fichiers. Seuls les aspects syntaxiques des chemins sont gérés : le nom de chemin peut représenter un chemin inexistant ou même un chemin qui n'est pas autorisé à exister sur le système de fichiers ou le système d'exploitation actuel.

Le nom de chemin a la syntaxe suivante :

  1. root-name (optionnel) : identifie la racine sur un système de fichiers avec plusieurs racines (tel que "C:" ou "//myserver" ). En cas d'ambiguïté, la plus longue séquence de caractères formant un root-name valide est traitée comme le root-name . La bibliothèque standard peut définir des root-names supplémentaires en plus de ceux reconnus par l'API du système d'exploitation.
  2. root-directory (optionnel) : un séparateur de répertoire qui, s'il est présent, marque ce chemin comme absolu . S'il est absent (et que le premier élément autre que le nom de racine est un nom de fichier), alors le chemin est relatif et nécessite un autre chemin comme emplacement de départ pour résoudre vers un nom de fichier.
  3. Zéro ou plusieurs des éléments suivants :
  • file-name : séquence de caractères qui ne sont pas des séparateurs de répertoire ou des séparateurs de répertoire préférés (des limitations supplémentaires peuvent être imposées par le système d'exploitation ou le système de fichiers). Ce nom peut identifier un fichier, un lien physique, un lien symbolique ou un répertoire. Deux file-name s spéciaux sont reconnus :
  • dot : le nom de fichier constitué d'un seul point . est un nom de répertoire qui fait référence au répertoire courant.
  • dot-dot : le nom de fichier constitué de deux points .. est un nom de répertoire qui fait référence au répertoire parent.
  • directory-separator s : le caractère barre oblique / ou le caractère alternatif fourni comme path::preferred_separator . Si ce caractère est répété, il est traité comme un seul séparateur de répertoire : / usr ///////lib est identique à / usr / lib .

Un chemin peut être normalisé en suivant cet algorithme :

  1. Si le chemin est vide, arrêter (la forme normale d'un chemin vide est un chemin vide).
  2. Remplacer chaque séparateur-de-répertoire (qui peut être constitué de plusieurs barres obliques) par un seul path::preferred_separator .
  3. Remplacer chaque caractère de barre oblique dans le nom-de-racine par path::preferred_separator .
  4. Supprimer chaque point et tout séparateur-de-répertoire immédiatement suivant.
  5. Supprimer chaque nom de fichier non- point-point immédiatement suivi d'un séparateur-de-répertoire et d'un point-point , ainsi que tout séparateur-de-répertoire immédiatement suivant.
  6. S'il existe un répertoire-racine , supprimer tous les point-point et tout séparateur-de-répertoire immédiatement les suivant.
  7. Si le dernier nom de fichier est point-point , supprimer tout séparateur-de-répertoire final.
  8. Si le chemin est vide, ajouter un point (la forme normale de . / est . ).

Le chemin peut être parcouru élément par élément via les itérateurs renvoyés par les fonctions begin() et end() , qui considèrent le chemin au format générique et itèrent sur le nom racine, le répertoire racine et les éléments de nom de fichier suivants (les séparateurs de répertoire sont ignorés sauf celui qui identifie le répertoire racine). Si le tout dernier élément du chemin est un séparateur de répertoire, le dernier itérateur déréférencera vers un élément vide.

L'appel de toute fonction membre non constante d'un path invalide tous les itérateurs faisant référence aux éléments de cet objet.

Si le système d'exploitation utilise une syntaxe native différente de la syntaxe générique portable décrite ci-dessus, les fonctions de bibliothèque définies pour accepter le "format détecté" acceptent les noms de chemin dans les deux formats : un argument de format détecté est considéré comme étant au format générique si et seulement s'il correspond au format générique mais n'est pas acceptable par le système d'exploitation comme chemin natif. Sur les systèmes d'exploitation où le format natif diffère entre les noms de chemin des répertoires et les noms de chemin des fichiers, un nom de chemin générique est traité comme un chemin de répertoire s'il se termine par un séparateur de répertoire et comme un fichier régulier sinon.

En tout cas, la classe path se comporte comme si elle stockait un nom de chemin dans le format natif et convertit automatiquement vers le format générique selon les besoins (chaque fonction membre spécifie dans quel format elle interprète le chemin).

Sur les systèmes POSIX, le format générique est le format natif et il n'est pas nécessaire de les distinguer ou de les convertir.

Les chemins sont implicitement convertibles vers et depuis std::basic_string s, ce qui permet de les utiliser avec d'autres API de fichiers.

Les opérateurs de flux utilisent std::quoted afin que les espaces ne provoquent pas de troncation lors de la lecture ultérieure par l'opérateur d'entrée de flux .

Fonctions membres de décomposition (par exemple extension ) retournent des filesystem::path au lieu d'objets string comme le font d'autres API.

Table des matières

Types membres

Type Définition
value_type type de caractère utilisé par l'encodage natif du système de fichiers : char sur POSIX, wchar_t sur Windows
string_type std:: basic_string < value_type >
const_iterator un itérateur constant LegacyInputIterator avec un value_type de path qui satisfait toutes les exigences de LegacyBidirectionalIterator sauf que pour deux itérateurs déréférençables égaux a et b de type const_iterator , il n'y a pas d'exigence que * a et * b référencent le même objet.

Il n'est pas spécifié si const_iterator est réellement un LegacyBidirectionalIterator

iterator const_iterator
détermine comment interpréter les représentations sous forme de chaînes des noms de chemin.

Les énumérateurs suivants sont également définis :

Nom Explication
native_format format natif des noms de chemin
generic_format format générique des noms de chemin
auto_format format défini par l'implémentation, détecté automatiquement lorsque possible

(énumération de membre public)

Constantes membres

constexpr value_type preferred_separator
[static]
séparateur de répertoire alternatif qui peut être utilisé en plus du séparateur portable / . Sous Windows, il s'agit du caractère barre oblique inverse \ . Sous POSIX, il s'agit de la même barre oblique / que le séparateur portable
(constante de membre public static)

Fonctions membres

construit un path
(fonction membre publique)
détruit un objet path
(fonction membre publique)
assigne un autre chemin
(fonction membre publique)
assigne le contenu
(fonction membre publique)
Concaténation
ajoute des éléments au chemin avec un séparateur de répertoire
(fonction membre publique)
concatène deux chemins sans introduire de séparateur de répertoire
(fonction membre publique)
Modificateurs
efface le contenu
(fonction membre publique)
convertit les séparateurs de répertoire en séparateur de répertoire préféré
(fonction membre publique)
supprime le composant de chemin du nom de fichier
(fonction membre publique)
remplace le dernier composant du chemin par un autre chemin
(fonction membre publique)
remplace l'extension
(fonction membre publique)
échange deux chemins
(fonction membre publique)
Observateurs de format
retourne la version native du chemin
(fonction membre publique)
retourne le chemin au format natif de nom de chemin converti en chaîne
(fonction membre publique)
retourne le chemin au format générique de nom de chemin converti en chaîne
(fonction membre publique)
Comparer
compare les représentations lexicales de deux chemins lexicographiquement
(fonction membre publique)
Génération
convertit le chemin en forme normale
convertit le chemin en forme relative
convertit le chemin en forme proximale
(fonction membre publique)
Décomposition
retourne le nom racine du chemin, s'il est présent
(fonction membre publique)
retourne le répertoire racine du chemin, s'il est présent
(fonction membre publique)
retourne le chemin racine du chemin, s'il est présent
(fonction membre publique)
retourne le chemin relatif au chemin racine
(fonction membre publique)
retourne le chemin du répertoire parent
(fonction membre publique)
retourne le composant de chemin du nom de fichier
(fonction membre publique)
retourne le composant de chemin stem (nom de fichier sans l'extension finale)
(fonction membre publique)
retourne l'extension de fichier du composant de chemin
(fonction membre publique)
Requêtes
vérifie si le chemin est vide
(fonction membre publique)
vérifie si l'élément de chemin correspondant n'est pas vide
(fonction membre publique)
vérifie si root_path() identifie de manière unique un emplacement du système de fichiers
(fonction membre publique)
Itérateurs
accès via itérateur au chemin en tant que séquence d'éléments
(fonction membre publique)

Fonctions non membres

Défini dans l'espace de noms std::filesystem
spécialise l'algorithme std::swap
(fonction)
(C++17)
calcule une valeur de hachage pour un objet path
(fonction)
(C++17) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++20)
compare lexicographiquement deux chemins
(fonction)
(C++17)
concatène deux chemins avec un séparateur de répertoire
(fonction)
effectue l'entrée et la sortie de flux sur un chemin entre guillemets
(fonction)
(C++17) (deprecated in C++20)
crée un path à partir d'une source encodée en UTF-8
(fonction)

Classes d'assistance

Défini dans l'espace de noms std
Support de hachage pour std::filesystem::path
(spécialisation de modèle de classe)
Support de formatage pour filesystem::path
(spécialisation de modèle de classe)

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3657 C++17 hash pour path était désactivé activé