Namespaces
Variants

std::experimental::filesystem:: recursive_directory_iterator

From cppreference.net
Défini dans l'en-tête <experimental/filesystem>
class recursive_directory_iterator ;
(filesystem TS)

recursive_directory_iterator est un LegacyInputIterator qui itère sur les éléments directory_entry d'un répertoire, et, récursivement, sur les entrées de tous les sous-répertoires. L'ordre d'itération n'est pas spécifié, sauf que chaque entrée de répertoire n'est visitée qu'une seule fois.

Par défaut, les liens symboliques ne sont pas suivis, mais cela peut être activé en spécifiant l'option de répertoire follow_directory_symlink au moment de la construction.

Les noms de chemin spéciaux dot et dot-dot sont ignorés.

Si le recursive_directory_iterator est avancé au-delà de la dernière entrée de répertoire du répertoire de niveau supérieur, il devient égal à l'itérateur construit par défaut, également appelé itérateur de fin. Deux itérateurs de fin sont toujours égaux, déréférencer ou incrémenter l'itérateur de fin est un comportement indéfini.

Si un fichier ou un répertoire est supprimé ou ajouté à l'arborescence de répertoires après la création de l'itérateur de répertoire récursif, il n'est pas spécifié si le changement serait observé via l'itérateur.

Si la structure de répertoire contient des cycles, l'itérateur de fin peut être inaccessible.

Table des matières

Types membres

Type de membre Définition
value_type filesystem::directory_entry
difference_type std::ptrdiff_t
pointer const filesystem::directory_entry*
reference const filesystem::directory_entry&
iterator_category std::input_iterator_tag

Fonctions membres

construit un itérateur de répertoire récursif
(fonction membre publique)
(destructor)
destructeur par défaut
(fonction membre publique)
Observateurs
accède à l'entrée pointée
(fonction membre publique)
retourne les options actuellement actives qui affectent l'itération
(fonction membre publique)
retourne la profondeur de récursion actuelle
(fonction membre publique)
vérifie si la récursion est désactivée pour le répertoire actuel
(fonction membre publique)
Modificateurs
assigne le contenu
(fonction membre publique)
avance à l'entrée suivante
(fonction membre publique)
déplace l'itérateur d'un niveau supérieur dans la hiérarchie des répertoires
(fonction membre publique)
désactive la récursion jusqu'au prochain incrément
(fonction membre publique)

Fonctions non membres

prise en charge de la boucle for basée sur des plages
(fonction)

De plus, operator== et operator!= sont fournis, soit en tant que membres soit en tant que non-membres, comme requis par LegacyInputIterator .

Notes

Un recursive_directory_iterator contient généralement un pointeur à comptage de références (pour satisfaire la sémantique de copie superficielle des LegacyInputIterator ) vers un objet d'implémentation, qui contient :

  • un conteneur (tel que std::vector ) d'itérateurs de répertoire non récursifs directory_iterator s qui forme la pile de récursion.
  • le compteur de profondeur de récursion (accessible avec depth() ).
  • les options de répertoire utilisées lors de la construction (accessibles avec options() ).
  • l'indicateur de récursion en attente (accessible avec recursion_pending() , peut être combiné avec les options de répertoire pour économiser de l'espace).

Exemple

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for (const fs::directory_entry& entry : fs::recursive_directory_iterator("sandbox"))
        std::cout << entry << '\n';
    fs::remove_all("sandbox");
}

Sortie possible :

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

Voir aussi

un itérateur vers le contenu du répertoire
(classe)
une entrée de répertoire
(classe)
options pour l'itération du contenu du répertoire
(énumération)