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 myentry Objekt des Typsdirectory_entry, 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_entry erstelltes Standardobjekt verfügt über mystack.top().first einen Iterator für die Endsequenz 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 Gibt das nächste Objekt zurück.
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

Header:<filesystem>

Namespace: std::tr2::sys

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) noexcept;

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
Die angegebene Inkrementierung.

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

Gibt das nächste Objekt zurück.

void pop();

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 myoptionsden Store anmelden. Der Standardkonstruktor verhält sich wie erwartet.

Siehe auch

Headerdateienreferenz
<filesystem>
Dateisystemnavigation (C++)