recursive_directory_iterator-Klasse

Beschreibt einen Eingabe-Iterator, der durch die Dateinamen in einem Verzeichnis sequenziert wird und möglicherweise rekursiv in Unterverzeichnisse absteigend ist. Bei einem Iterator Xwertet der Ausdruck *X ein Objekt der Klasse directory_entry aus, das den Dateinamen umschließt, und alles, was über seinen Status bekannt ist.

Weitere Informationen und Codebeispiele finden Sie unter File System Navigation (C++) (Dateisystemnavigation (C++)).

Syntax

class recursive_directory_iterator;

Hinweise

Die Klassenvorlage speichert:

  1. ein Objekt vom Typ stack<pair<directory_iterator, path>>, das hier für die Zwecke der Exposition aufgerufen mystack wird, die das Verschachteln von Verzeichnissen darstellt, die sequenziert werden sollen

  2. ein Hier aufgerufenes directory_entry Objekt des Typsmyentry, das den aktuellen Dateinamen in der Verzeichnissequenz darstellt

  3. ein Objekt vom Typ bool, das hier aufgerufen wird no_push , wobei erfasst wird, ob rekursive Abstieg in Unterverzeichnisse deaktiviert ist.

  4. ein Objekt vom Typ directory_options, das hier genannt wird myoptions , welche die bei der Konstruktion festgelegten Optionen aufzeichnet

Ein vom Typ recursive_directory_iterator standard konstruiertes Objekt weist einen End-of-Sequence-Iterator auf mystack.top().first und stellt den End-of-Sequence-Iterator dar. Beispielsweise, wenn das Verzeichnis abc mit Einträgen def (einem Verzeichnis) def/ghiund jkldem Code:

for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
    visit(next->path());

aufruft den Besuch mit den Argumenten path("abc/def/ghi") und path("abc/jkl"). Sie können die Sequenzierung über eine Verzeichnisunterstruktur auf zwei Arten qualifizieren:

  1. Ein Verzeichnis symlink wird nur dann gescannt, wenn Sie ein recursive_directory_iteratordirectory_options Argument erstellen, dessen Wert lautet directory_options::follow_directory_symlink.

  2. Wenn Sie aufrufen disable_recursion_pending, wird ein nachfolgendes Verzeichnis, das während eines Inkrements aufgetreten ist, nicht rekursiv gescannt.

Konstruktoren

Konstruktor Beschreibung
recursive_directory_iterator Erstellt ein Objekt vom Typ recursive_directory_iterator.

Memberfunktionen

Memberfunktion Beschreibung
depth Gibt zurück mystack.size() - 1, also pval bei der Tiefe Null.
disable_recursion_pending Stores true in no_push.
increment Wechselt nacheinander zum nächsten Dateinamen.
Optionen Gibt myoptions zurück.
pop Verschiebt den Iterator zum nächsten Eintrag in der nächsten unteren Tiefe.
recursion_pending Gibt !no_push zurück.

Operatoren

Operator Beschreibung
operator!= Gibt !(*this == right) zurück.
operator= Die als Standard festgelegten Memberzuweisungsoperatoren verhalten sich wie erwartet.
operator== Gibt nur zurück true , wenn beide *this und rechte End-of-Sequence-Iteratoren oder beide nicht End-of-Sequence-Iteratoren sind.
operator* Gibt myentry zurück.
operator-> Gibt &**this zurück.
operator++ Erhöht die recursive_directory_iterator.

Anforderungen

Kopfball:<filesystem>

Namespace:std::filesystem

recursive_directory_iterator::depth

Gibt zurück mystack.size() - 1, also pval bei der Tiefe Null.

int depth() const;

recursive_directory_iterator::disable_recursion_pending

Stores true in no_push.

void disable_recursion_pending();

recursive_directory_iterator::increment

Wechselt nacheinander zum nächsten Dateinamen.

recursive_directory_iterator& increment(error_code& ec);

Parameter

EG
Angegebener Fehlercode.

Hinweise

Die Funktion versucht, zum nächsten Dateinamen in der geschachtelten Sequenz zu gelangen. Bei erfolgreicher Ausführung speichert sie diesen Dateinamen in myentry; andernfalls wird ein Iterator für die Endsequenz erzeugt.

recursive_directory_iterator::operator!=

Gibt !(*this == right) zurück.

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

Parameter

right
Die recursive_directory_iterator zum Vergleich.

recursive_directory_iterator::operator=

Die als Standard festgelegten Memberzuweisungsoperatoren verhalten sich wie erwartet.

recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;

Parameter

recursive_directory_iterator
Die recursive_directory_iterator , die in die recursive_directory_iteratorDatei kopiert werden.

recursive_directory_iterator::operator==

Gibt nur zurück true , wenn beide *this und rechte End-of-Sequence-Iteratoren oder beide nicht End-of-Sequence-Iteratoren sind.

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

Parameter

right
Die recursive_directory_iterator zum Vergleich.

recursive_directory_iterator::operator*

Gibt myentry zurück.

const directory_entry& operator*() const;

recursive_directory_iterator::operator->

Gibt &**this zurück.

const directory_entry * operator->() const;

recursive_directory_iterator::operator++

Erhöht die recursive_directory_iterator.

recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);

Parameter

int
Dummy-Argument. Es ist eine C++-Konvention, die nur verwendet wird, um den Postfix-Inkrementoperator vom Präfix-Inkrementoperator zu unterscheiden. Der C++-Standard erfordert, dass das Postfix-Formular einen Dummy-Int-Parameter verwendet.

Hinweise

Die erste Memberfunktion ruft increment()die Funktion auf und gibt dann zurück *this. Die zweite Memberfunktion erstellt eine Kopie des Objekts, ruft increment()auf und gibt dann die Kopie zurück.

recursive_directory_iterator::options

Gibt myoptions zurück.

directory_options options() const;

recursive_directory_iterator::pop

Verschiebt den Iterator zum nächsten Eintrag in der nächsten unteren Tiefe.

void pop();
void pop(error_code& ec);

Parameter

ec
Der Fehlercode, der den Status des Vorgangs meldet. Die Überladung, die ein ec-Argument verwendet, meldet Fehler in ec , anstatt eine Ausnahme zu auslösen.

Hinweise

Wenn depth() == 0 das Objekt zu einem End-of-Sequence-Iterator wird. Andernfalls beendet die Memberfunktion das Durchsuchen des aktuellen (tiefsten) Verzeichnisses und setzt das Durchsuchen auf der nächstniedrigeren Tiefe fort.

recursive_directory_iterator::recursion_pending

Gibt !no_push zurück.

bool recursion_pending() const;

recursive_directory_iterator::recursive_directory_iterator

Erstellt ein Objekt vom Typ 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;

Parameter

pval
Der angegebene Pfad.

error_code
Der angegebene Fehlercode.

Setzt
Die angegebenen Verzeichnisoptionen.

recursive_directory_iterator
Das recursive_directory_iterator-Element, von dem das erstellte recursive_directory_iterator-Element eine Kopie sein soll.

Hinweise

Der erste Konstruktor erzeugt einen Sequenzende-Iterator. Die zweiten und dritten Konstruktoren speichern false in no_push und directory_options::none in myoptions, und versuchen Sie dann, Pval als Verzeichnis zu öffnen und zu lesen. Bei erfolgreicher Ausführung initialisieren mystackmyentry sie den ersten Nicht-Verzeichnisdateinamen in der geschachtelten Sequenz und erzeugen andernfalls einen Iterator für die Endsequenz.

Die vierten und fünften Konstruktoren verhalten sich genauso wie der zweite und dritte, mit der Ausnahme, dass sie sich zuerst für den Store myoptions. Der Standardkonstruktor verhält sich wie erwartet.

Siehe auch

Headerdateienreferenz
<Dateisystem>
Dateisystemnavigation (C++)