Namespaces
Variants

std::experimental::filesystem:: recursive_directory_iterator

From cppreference.net
Definiert in Header <experimental/filesystem>
class recursive_directory_iterator ;
(Filesystem TS)

recursive_directory_iterator ist ein LegacyInputIterator , der über die directory_entry -Elemente eines Verzeichnisses und rekursiv über die Einträge aller Unterverzeichnisse iteriert. Die Iterationsreihenfolge ist nicht spezifiziert, außer dass jeder Verzeichniseintrag nur einmal besucht wird.

Standardmäßig werden symbolischen Verknüpfungen nicht gefolgt, dies kann jedoch durch Angabe der Verzeichnisoption follow_directory_symlink zur Konstruktionszeit aktiviert werden.

Die speziellen Pfadnamen dot und dot-dot werden übersprungen.

Wenn der recursive_directory_iterator über den letzten Verzeichniseintrag des obersten Verzeichnisses hinaus bewegt wird, wird er gleich dem standardmäßig konstruierten Iterator, auch bekannt als End-Iterator. Zwei End-Iteratoren sind immer gleich, das Dereferenzieren oder Inkrementieren des End-Iterators ist undefiniertes Verhalten.

Wenn eine Datei oder ein Verzeichnis nach der Erstellung des rekursiven Verzeichnis-Iterators aus dem Verzeichnisbaum gelöscht oder hinzugefügt wird, ist es nicht spezifiziert, ob die Änderung durch den Iterator beobachtet werden würde.

Wenn die Verzeichnisstruktur Zyklen enthält, könnte der End-Iterator unerreichbar sein.

Inhaltsverzeichnis

Mitgliedertypen

Mitgliedertyp Definition
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

Memberfunktionen

Konstruiert einen rekursiven Verzeichnisiterator
(öffentliche Elementfunktion)
(destructor)
Standard-Destruktor
(öffentliche Elementfunktion)
Beobachter
greift auf den referenzierten Eintrag zu
(öffentliche Elementfunktion)
gibt die aktuell aktiven Optionen zurück, die die Iteration beeinflussen
(öffentliche Elementfunktion)
gibt die aktuelle Rekursionstiefe zurück
(öffentliche Elementfunktion)
prüft, ob die Rekursion für das aktuelle Verzeichnis deaktiviert ist
(öffentliche Elementfunktion)
Modifikatoren
weist Inhalte zu
(öffentliche Elementfunktion)
wechselt zum nächsten Eintrag
(öffentliche Elementfunktion)
bewegt den Iterator eine Ebene höher in der Verzeichnishierarchie
(öffentliche Elementfunktion)
deaktiviert die Rekursion bis zum nächsten Inkrement
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

Unterstützung für bereichsbasierte for-Schleifen
(Funktion)

Zusätzlich werden operator== und operator!= bereitgestellt, entweder als Member oder als Non-Member, wie von LegacyInputIterator gefordert.

Hinweise

Ein recursive_directory_iterator enthält typischerweise einen referenzgezählten Zeiger (um die Flachkopie-Semantik von LegacyInputIterator zu erfüllen) auf ein Implementierungsobjekt, das Folgendes enthält:

  • ein Container (wie std::vector ) von nicht-rekursiven directory_iterator s , der den Rekursionsstapel bildet.
  • der Rekursionstiefenzähler (zugänglich mit depth() ).
  • die bei der Konstruktion verwendeten Verzeichnisoptionen (zugänglich mit options() ).
  • das ausstehende Rekursionsflag (zugänglich mit recursion_pending() , kann mit den Verzeichnisoptionen kombiniert werden, um Speicherplatz zu sparen).

Beispiel

#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");
}

Mögliche Ausgabe:

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

Siehe auch

Ein Iterator für die Inhalte des Verzeichnisses
(Klasse)
Ein Verzeichniseintrag
(Klasse)
Optionen für die Iteration von Verzeichnisinhalten
(Enumeration)