Partager via


recursive_directory_iterator, classe

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 prend la valeur d’un objet de classe directory_entry qui encapsule le nom de fichier et tout ce qui est connu de son état.

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

Syntaxe

class recursive_directory_iterator;

Notes

Le modèle de classe stocke :

  1. un objet de type stack<pair<directory_iterator, path>>, appelé mystack ici à des fins d’exposition, qui représente le nid des répertoires à séquencer

  2. objet de type directory_entry appelé myentry ici, qui représente le nom de fichier actuel dans la séquence de répertoires

  3. un objet de type bool, appelé no_push ici, qui enregistre si la descente récursive dans les sous-répertoires est désactivée

  4. un objet de type directory_options, appelé myoptions ici, qui enregistre les options établies lors de la construction

Un objet construit par défaut de type recursive_directory_entry possède un itérateur de fin de séquence et mystack.top().first 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());

appellera visite 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 :

  1. Un lien symbolique de répertoire ne sera analysé que si vous construisez un recursive_directory_iterator directory_options argument dont la valeur est directory_options::follow_directory_symlink.

  2. Si vous appelez disable_recursion_pending, un répertoire suivant rencontré lors d’un incrément ne sera pas analysé de manière récursive.

Constructeurs

Constructeur Description
recursive_directory_iterator Construit un objet recursive_directory_iterator.

Fonctions Membre

Fonction membre Description
depth 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 Retourne l’objet suivant.
recursion_pending Retourne !no_push.

Opérateurs

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.
operator-> Retourne &**this.
operator++ Incrémente le recursive_directory_iterator.

Spécifications

Header :<filesystem>

Espace de noms : std::tr2::sys

recursive_directory_iterator::depth

Retourne mystack.size() - 1, donc pval est à la profondeur zéro.

int depth() const;

recursive_directory_iterator::disable_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;

Paramètres

Ce
Code d’erreur spécifié.

Notes

La fonction tente d’accéder au 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;

Paramètres

right
Recursive_directory_iterator pour la 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&&) noexcept = default;

Paramètres

recursive_directory_iterator
Le recursive_directory_iterator copié dans le recursive_directory_iterator.

recursive_directory_iterator::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.

bool operator==(const recursive_directory_iterator& right) const;

Paramètres

right
Recursive_directory_iterator pour la 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);

Paramètres

int
Incrément spécifié.

Notes

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::pop

Retourne l’objet suivant.

void pop();

Notes

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 actif (le plus profond), et reprend au prochain niveau de profondeur.

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

recursive_directory_iterator(const path& pval,
    error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
    directory_options opts);

recursive_directory_iterator(const path& pval,
    directory_options opts,
    error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) noexcept = default;

Paramètres

pval
Chemin d'accès spécifié.

error_code
Code d’erreur spécifié.

Opte
Options de répertoire spécifiées.

recursive_directory_iterator
recursive_directory_iterator dont le recursive_directory_iterator construit doit être une copie.

Notes

Le premier constructeur produit un itérateur de fin de séquence. Les deuxième et troisième constructeurs stockent false et in directory_options::none no_push myoptions, puis tentent d’ouvrir et de lire pval en tant que répertoire. En cas de réussite, ils initialisent mystack et myentry désignent le premier nom de fichier non-répertoire dans la séquence imbriquée ; sinon, ils produisent un itérateur de fin de séquence.

Les quatrième et cinquième constructeurs se comportent de la même façon que le deuxième et le troisième, sauf qu’ils ont d’abord choisi.myoptions Le constructeur par défaut se comporte comme prévu.

Voir aussi

Informations de référence sur les fichiers d’en-tête
<filesystem>
Navigation dans le système de fichiers (C++)