<experimental/filesystem> recursive_directory_iterator classe

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 :

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

  1. Un lien symbolique de répertoire est analysé uniquement si vous construisez un recursive_directory_iteratordirectory_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 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.

Voir aussi

<experimental/filesystem>
class directory_entry