Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Important
In diesem Artikel wird die recursive_directory_iterator Klasse aus der vorstandardlichen <experimental/filesystem> Implementierung der technischen Spezifikation des ISO C++-Dateisystems (N4100) beschrieben. Diese API ist nicht identisch mit der C++17-Klasse recursive_directory_iterator in <filesystem>. Es verwendet verschiedene Signaturen, einschließlich eines noexceptincrement und eines einzigen Formulars pop ohne error_code Überladung. Die experimentelle Implementierung wurde ab dem Toolset Microsoft Visual C++ (MSVC) 14.51 entfernt. Neuer Code sollte stattdessen die C++17-Klasse recursive_directory_iterator verwenden.
Beschreibt einen Eingabe-Iterator, der durch die Dateinamen in einem Verzeichnis sequenziert wird und möglicherweise rekursiv in Unterverzeichnisse absteigend ist. Bei einem Iterator Xgibt der Ausdruck *X ein Objekt der Klasse directory_entry zurück, das den Dateinamen und alles bekannte Über seinen Status umschließt.
Syntax
class recursive_directory_iterator;
Hinweise
Die Klassenspeicher:
ein Objekt vom Typ
stack<pair<directory_iterator, path>>, das hier für die Zwecke der Exposition aufgerufenmystackwird, die das Nest von Verzeichnissen zur Sequenz darstelltein Hier aufgerufenes
myentryObjekt des Typsdirectory_entry, das den aktuellen Dateinamen in der Verzeichnissequenz darstelltein Objekt vom Typ
bool, das hier aufgerufen wirdno_push, wobei erfasst wird, ob rekursive Abstieg in Unterverzeichnisse deaktiviert ist.ein Objekt vom Typ
directory_options, das hier genannt wirdmyoptions, 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());
Aufrufe visit mit den Argumenten path("abc/def/ghi") und path("abc/jkl"). Sie können die Sequenzierung über eine Verzeichnisunterstruktur auf zwei Arten qualifizieren:
Ein Verzeichnis symlink wird nur gescannt, wenn Sie ein
recursive_directory_iteratordirectory_optionsArgument erstellen, dessen Wert lautetdirectory_options::follow_directory_symlink.Wenn Sie aufrufen
disable_recursion_pending, wird während eines Inkrements ein nachfolgendes Verzeichnis nicht rekursiv gescannt.
Constructors
| Konstruktor | Description |
|---|---|
| recursive_directory_iterator | Erstellt ein Objekt vom Typ recursive_directory_iterator. |
Memberfunktionen
| Memberfunktion | Description |
|---|---|
| Tiefe | 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. |
Betriebspersonal
| Operator | Description |
|---|---|
| operator!= | Gibt !(*this == right) zurück. |
| operator= | Die standardmäßigen Memberzuweisungsoperatoren verhalten sich erwartungsgemäß. |
| 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:<experimental/filesystem>
Namespace:std::experimental::filesystem
recursive_directory_iterator::d epth
Gibt zurück mystack.size() - 1, also pval bei der Tiefe Null.
int depth() const;
recursive_directory_iterator::d isable_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
ec
Angegebener Fehlercode.
Hinweise
Die Funktion versucht, zum nächsten Dateinamen in der geschachtelten Sequenz zu wechseln. Wenn die Datei erfolgreich verläuft, wird dieser Dateiname 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
Der recursive_directory_iterator Vergleich.
recursive_directory_iterator::operator=
Die standardmäßigen Memberzuweisungsoperatoren verhalten sich erwartungsgemäß.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;
Parameter
recursive_directory_iterator
Das recursive_directory_iterator kopierte In das recursive_directory_iterator.
recursive_directory_iterator::operator==
Gibt nur zurück true , wenn beide *this und rechte Iteratoren end-of-sequence iterators sind oder beide keine End-of-Sequence-Iteratoren sind.
bool operator==(const recursive_directory_iterator& right) const;
Parameter
right
Der recursive_directory_iterator 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::p op
Verschiebt den Iterator zum nächsten Eintrag in der nächsten unteren Tiefe.
void pop();
Hinweise
Wenn depth() == 0, wird das Objekt zu einem Iterator für die Endsequenz. Andernfalls beendet die Memberfunktion das Scannen des aktuellen (tiefsten) Verzeichnisses und wird in der nächsten unteren Tiefe fortgesetzt.
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,
directory_options opts = directory_options::none);
recursive_directory_iterator(const path& pval,
directory_options opts,
error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) = default;
Parameter
pval
Der angegebene Pfad.
error_code
Der angegebene Fehlercode.
opts
Die angegebenen Verzeichnisoptionen.
recursive_directory_iterator
Die recursive_directory_iterator Konstruktion recursive_directory_iterator soll eine Kopie sein.
Hinweise
Der erste Konstruktor erstellt einen End-of-Sequence-Iterator. Der zweite Konstruktor speichert und anmeldetmyoptionsfalseno_push sich und versucht dann, pval als Verzeichnis zu öffnen und zu lesen. Wenn er erfolgreich ist, initialisiert mystack er und myentry verweist auf den ersten Nicht-Verzeichnis-Dateinamen in der geschachtelten Sequenz. Wenn ein Fehler auftritt, wird ein Iterator für die Endsequenz erstellt.
Die dritten und vierten Konstruktoren verhalten sich genauso wie die zweite, mit der Ausnahme, dass sie Fehler in ec melden, anstatt eine Ausnahme zu auslösen. Der vierte Konstruktor speichert directory_options::none in myoptions. Der Standardkonstruktor verhält sich wie erwartet.