Partager via


filesystem

Incluez l’en-tête <filesystem> pour accéder aux classes et fonctions qui manipulent et récupèrent des informations sur les chemins d’accès, les fichiers et les répertoires.

Syntaxe

#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;

Important

Dans la version de Visual Studio 2017, l’en-tête <filesystem> n’était pas encore une norme C++. C++ dans Visual Studio 2017 RTW implémente le projet final de norme, trouvé dans ISO/IEC JTC 1/SC 22/WG 21 N4100. Visual Studio 2017 version 15.7 et ultérieure prend en charge la nouvelle norme C++17 <filesystem> . Il s’agit d’une nouvelle implémentation, incompatible avec la version précédente std::experimental . Elle a été rendue nécessaire par la prise en charge de symlink, les correctifs de bogues et les modifications apportées au comportement standard requis. Dans Visual Studio 2019 version 16.3 et ultérieures, y compris <filesystem> fournit uniquement le nouveau std::filesystem. Inclut <experimental/filesystem> uniquement l’ancienne experimental implémentation. L’implémentation experimental sera supprimée dans la prochaine version ABI des bibliothèques.

Cet en-tête prend en charge les systèmes de fichiers pour l’une des deux grandes classes de systèmes d’exploitation hôtes : Microsoft Windows et POSIX.

Bien que la plupart des fonctionnalités soit communes aux deux systèmes d’exploitation, ce document met l’accent sur les différences. Par exemple :

  • Windows prend en charge plusieurs noms racines, tels que c: ou \\network_name. Un système de fichiers se compose d’une forêt d’arborescences, chacun avec son propre répertoire racine, tel que c:\ ou \\network_name\, et chacun avec son propre répertoire actif, pour terminer un nom de chemin relatif (un nom de chemin d’accès non absolu).

  • POSIX prend en charge une arborescence unique, sans nom racine, le répertoire /racine unique et un seul répertoire actif.

Une autre différence importante réside dans la représentation native des chemins :

  • Windows utilise une séquence terminée par null , wchar_tencodée en UTF-16 (un ou plusieurs éléments pour chaque caractère).

  • POSIX utilise une séquence terminée par null de char, encodée en UTF-8 (un ou plusieurs éléments pour chaque caractère).

  • Un objet de classe path stocke le chemin d’accès sous forme native, mais prend en charge la conversion facile entre ce formulaire stocké et plusieurs formulaires externes :

    • Séquence terminée par null de char, encodée comme favorisée par le système d’exploitation.

    • Séquence terminée par null de char, encodée en UTF-8.

    • Séquence terminée par null de wchar_t, encodée comme favorisée par le système d’exploitation.

    • Séquence terminée par null de char16_t, encodée en UTF-16.

    • Séquence terminée par null de char32_t, encodée en UTF-32.

    Selon les besoins, les conversions entre ces représentations passent par une ou plusieurs facettes codecvt. Si aucun objet de paramètres régionaux spécifique n’est spécifié, ces facettes sont obtenues à partir des paramètres régionaux globaux.

Il existe une autre différence, la précision avec laquelle chaque système d’exploitation vous permet de spécifier les autorisations d’accès aux fichiers ou répertoires :

  • Windows enregistre si un fichier est en lecture seule ou accessible en écriture, un attribut qui n’a aucune signification pour les répertoires.

  • POSIX enregistre si un fichier peut être lu, écrit ou exécuté (analysé, si un répertoire). Et, que chaque opération soit autorisée pour le propriétaire, le groupe du propriétaire ou pour tout le monde, ainsi que quelques autres autorisations.

Pour les deux systèmes, la structure imposée au chemin après le nom de la racine est la même. Pour le chemin c:/abc/xyz/def.extd’accès :

  • Le nom racine est c:.

  • Le répertoire racine est /.

  • Le chemin racine est c:/.

  • Le chemin relatif est abc/xyz/def.ext.

  • Le chemin d’accès parent est c:/abc/xyz.

  • Le nom de fichier est def.ext.

  • La tige est def.

  • L’extension est .ext.

Une différence mineure est le séparateur préféré entre la séquence de répertoires dans un chemin d’accès. Les deux systèmes d’exploitation vous permettent d’écrire une barre oblique /, mais dans certains contextes, Windows préfère une barre oblique \inverse. L’implémentation stocke son séparateur préféré dans le membre preferred_separator de données dans path.

Enfin, path les objets ont une fonctionnalité importante : vous pouvez les utiliser partout où un argument de nom de fichier est requis dans les classes définies dans l’en-tête <fstream>.

Pour plus d’informations et d’exemples de code, consultez navigation dans le système de fichiers (C++).

Membres

Classes

Nom Description
directory_entry, classe Décrit un objet retourné par un directory_iterator ou un recursive_directory_iterator et contient un path.
directory_iterator, classe Décrit un itérateur d'entrée qui parcourt les noms de fichiers dans un répertoire de système de fichiers.
filesystem_error, classe Classe de base pour les exceptions qui sont levées pour signaler un dépassement de capacité du système de bas niveau.
path, classe Définit une classe qui stocke un objet de type de modèle String qui peut être utilisé comme nom de fichier.
recursive_directory_iterator, classe Décrit un itérateur d'entrée qui parcourt les noms de fichiers dans un répertoire de système de fichiers. L'itérateur peut également descendre dans des sous-répertoires.
file_status, classe Encapsule un file_type.

Structures

Nom Description
Structure space_info Contient des informations sur un volume.

Functions

<filesystem>, fonctions

Opérateurs

<filesystem>, opérateurs

Énumérations

Nom Description
copy_options Énumération utilisée avec copy_file qui détermine le comportement si un fichier de destination existe déjà.
directory_options Énumération qui spécifie les options pour les itérateurs de répertoire.
file_type Énumération pour les types de fichiers.
perm_options Énumère les options de la permissions fonction.
perms Type de masque de bits utilisé pour transmettre les autorisations et les options des autorisations

Voir aussi

Informations de référence sur les fichiers d’en-tête