std::filesystem:: path
|
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 :
- 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.
- 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.
- 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 :
- Si le chemin est vide, arrêter (la forme normale d'un chemin vide est un chemin vide).
-
Remplacer chaque
séparateur-de-répertoire
(qui peut être constitué de plusieurs barres obliques) par un seul
path::preferred_separator. -
Remplacer chaque caractère de barre oblique dans le
nom-de-racine
par
path::preferred_separator. - Supprimer chaque point et tout séparateur-de-répertoire immédiatement suivant.
- 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.
- S'il existe un répertoire-racine , supprimer tous les point-point et tout séparateur-de-répertoire immédiatement les suivant.
- Si le dernier nom de fichier est point-point , supprimer tout séparateur-de-répertoire final.
- 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
|
||||||||
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 :
(é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
|
|
|
(C++17)
|
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) |
|
(C++17)
|
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é |