Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Cet article décrit la recursive_directory_iterator classe de l’implémentation préstandarde <experimental/filesystem> de la spécification technique du système de fichiers ISO C++ (N4100). Cette API n’est pas la même que la classe C++17 recursive_directory_iterator dans <filesystem>. Il utilise différentes signatures, y compris un noexceptincrement et un formulaire pop unique sans error_code surcharge. L’implémentation expérimentale a été supprimée à partir de l’ensemble d’outils Microsoft Visual C++ (MSVC) 14.51. Le nouveau code doit utiliser la classe C++17 recursive_directory_iterator à la place.
Décrit un itérateur d’entrée qui séquence les noms de fichiers dans un répertoire, éventuellement descendant dans des sous-répertoires de manière récursive. Pour un itérateur X, l’expression *X retourne un objet de classe directory_entry qui encapsule le nom de fichier et tout ce qui est connu sur son état.
Syntax
class recursive_directory_iterator;
Remarques
La classe stocke :
un objet de type
stack<pair<directory_iterator, path>>, appelémystackici à des fins d’exposition, qui représente le nid des répertoires à séquencerobjet de type
directory_entryappelémyentryici, qui représente le nom de fichier actuel dans la séquence de répertoiresun objet de type
bool, appeléno_pushici, qui enregistre si la descente récursive dans les sous-répertoires est désactivéeun objet de type
directory_options, appelémyoptionsici, qui enregistre les options établies lors de la construction
Un objet construit par défaut de type recursive_directory_iterator a un itérateur de fin de séquence au niveau mystack.top().first et représente l’itérateur de fin de séquence. Par exemple, étant donné le répertoire abc avec des entrées def (un répertoire), def/ghiet jkl, le code :
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
appels visit avec les arguments path("abc/def/ghi") et path("abc/jkl"). Vous pouvez qualifier le séquencement via une sous-arborescence d’annuaire de deux façons :
Un lien symbolique de répertoire est analysé uniquement si vous construisez un
recursive_directory_iteratordirectory_optionsargument dont la valeur estdirectory_options::follow_directory_symlink.Si vous appelez
disable_recursion_pending, un répertoire suivant rencontré lors d’un incrément n’est pas analysé de manière récursive.
Constructors
| Constructor | Description |
|---|---|
| recursive_directory_iterator | Construit un objet recursive_directory_iterator. |
Fonctions Membre
| Fonction membre | Description |
|---|---|
| de la profondeur | Retourne mystack.size() - 1, donc pval est à la profondeur zéro. |
| disable_recursion_pending | Stocke true dans no_push. |
| increment | Passe au nom de fichier suivant dans la séquence. |
| Options | Retourne myoptions. |
| pop | Déplace l’itérateur vers l’entrée suivante à la profondeur inférieure suivante. |
| recursion_pending | Retourne !no_push. |
Operators
| Opérateur | Description |
|---|---|
| operator!= | Retourne !(*this == right). |
| operator= | Les opérateurs d’affectation de membre par défaut se comportent comme prévu. |
| operator== | Retourne true uniquement si les deux et droite*this sont des itérateurs de fin de séquence ou si les deux ne sont pas des itérateurs de fin de séquence. |
| operator* | Retourne myentry. |
| opérateur -> | Retourne &**this. |
| operator++ | Incrémente le recursive_directory_iterator. |
Spécifications
En-tête :<experimental/filesystem>
Noms:std::experimental::filesystem
recursive_directory_iterator ::d epth
Retourne mystack.size() - 1, donc pval est à la profondeur zéro.
int depth() const;
recursive_directory_iterator ::d isable_recursion_pending
Stocke true dans no_push.
void disable_recursion_pending();
recursive_directory_iterator ::increment
Passe au nom de fichier suivant dans la séquence.
recursive_directory_iterator& increment(error_code& ec) noexcept;
Parameters
ec
Code d’erreur spécifié.
Remarques
La fonction tente d’atteindre le nom de fichier suivant dans la séquence imbriquée. En cas de réussite, il stocke ce nom de fichier dans myentry; sinon, il produit un itérateur de fin de séquence.
recursive_directory_iterator ::operator !=
Retourne !(*this == right).
bool operator!=(const recursive_directory_iterator& right) const;
Parameters
right
À des recursive_directory_iterator fins de comparaison.
recursive_directory_iterator ::operator=
Les opérateurs d’affectation de membre par défaut se comportent comme prévu.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;
Parameters
recursive_directory_iterator
En recursive_directory_iterator cours de copie dans le recursive_directory_iterator.
recursive_directory_iterator ::operator==
Retourne true uniquement si les deux et droites*this sont des itérateurs de fin de séquence ou si les deux ne sont pas des itérateurs de fin de séquence.
bool operator==(const recursive_directory_iterator& right) const;
Parameters
right
À des recursive_directory_iterator fins de comparaison.
recursive_directory_iterator ::operator*
Retourne myentry.
const directory_entry& operator*() const;
recursive_directory_iterator ::operator->
Retourne &**this.
const directory_entry * operator->() const;
recursive_directory_iterator ::operator++
Incrémente le recursive_directory_iterator.
recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);
Parameters
int
Argument factice. Il s’agit d’une convention C++ utilisée uniquement pour distinguer l’opérateur d’incrément postfix de l’opérateur d’incrément de préfixe. La norme C++ nécessite que le formulaire postfix prenne un paramètre int factice.
Remarques
La première fonction membre appelle increment(), puis retourne *this. La deuxième fonction membre effectue une copie de l’objet, appelle increment(), puis retourne la copie.
recursive_directory_iterator ::options
Retourne myoptions.
directory_options options() const;
recursive_directory_iterator ::p op
Déplace l’itérateur vers l’entrée suivante à la profondeur inférieure suivante.
void pop();
Remarques
Si depth() == 0, l’objet devient un itérateur de fin de séquence. Sinon, la fonction membre met fin à l’analyse du répertoire actuel (le plus profond) et reprend à la profondeur inférieure suivante.
recursive_directory_iterator ::recursion_pending
Retourne !no_push.
bool recursion_pending() const;
recursive_directory_iterator ::recursive_directory_iterator
Construit un objet recursive_directory_iterator.
recursive_directory_iterator() noexcept;
explicit recursive_directory_iterator(const path& pval,
directory_options opts = directory_options::none);
recursive_directory_iterator(const path& pval,
directory_options opts,
error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) = default;
Parameters
pval
Chemin d’accès spécifié.
error_code
Code d’erreur spécifié.
opts
Options de répertoire spécifiées.
recursive_directory_iterator
Dont recursive_directory_iterator la construction recursive_directory_iterator doit être une copie.
Remarques
Le premier constructeur crée un itérateur de fin de séquence. Le deuxième constructeur stocke falseno_push et choisitmyoptions, puis tente d’ouvrir et de lire pval en tant que répertoire. Si elle réussit, elle initialise mystack et myentry pointe vers le premier nom de fichier non-répertoire dans la séquence imbriquée. En cas d’échec, il crée un itérateur de fin de séquence.
Les troisième et quatrième constructeurs se comportent de la même façon que le deuxième, sauf qu’ils signalent des erreurs en ec au lieu de lever une exception. Le quatrième constructeur stocke directory_options::none dans myoptions. Le constructeur par défaut se comporte comme prévu.