std::experimental::filesystem:: recursive_directory_iterator
|
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) |