Namensräume
Varianten
Aktionen

std::experimental::filesystem::recursive_directory_iterator

Von cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
 
Definiert im Header <experimental/filesystem>
class recursive_directory_iterator;
(Dateisystem-TS)

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

Standardmäßig werden Symlinks nicht verfolgt, 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 Top-Level-Verzeichnisses hinaus fortbewegt wird, wird er gleich dem Standardkonstruktor-Iterator, auch bekannt als End-Iterator. Zwei End-Iteratoren sind immer gleich, Dereferenzierung oder Inkrementierung des End-Iterators ist undefiniertes Verhalten.

Wenn eine Datei oder ein Verzeichnis nach der Erstellung des rekursiven Verzeichnisiterators gelöscht oder zum Verzeichnisbaum hinzugefügt wird, ist nicht spezifiziert, ob die Änderung über den Iterator beobachtet wird.

Wenn die Verzeichnisstruktur Zyklen enthält, kann der End-Iterator unerreichbar sein.

Inhalt

[edit] Member types

Mitgliedertyp Definition
value_type filesystem::directory_entry
difference_type std::ptrdiff_t
Zeiger const filesystem::directory_entry*
Referenz const filesystem::directory_entry&
iterator_category std::input_iterator_tag

[edit] Member functions

konstruiert einen rekursiven Verzeichnisiterator
(public member function) [edit]
(Destruktor)
standardmäßiger Destruktor
(public member function) [edit]
Observer
greift auf den Zeigereintrag zu
(public member function) [edit]
gibt die aktuell aktiven Optionen zurück, die die Iteration beeinflussen
(public member function) [edit]
gibt die aktuelle Rekursionstiefe zurück
(public member function) [edit]
prüft, ob die Rekursion für das aktuelle Verzeichnis deaktiviert ist
(public member function) [edit]
Modifizierer
weist Inhalte zu
(public member function) [edit]
bewegt sich zum nächsten Eintrag
(public member function) [edit]
bewegt den Iterator eine Ebene in der Verzeichnishierarchie nach oben
(public member function) [edit]
deaktiviert die Rekursion bis zum nächsten Inkrement
(public member function) [edit]

[edit] Non-member functions

Unterstützung für range-basierte for-Schleifen
(function) [edit]

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

[edit] Notes

Ein recursive_directory_iterator hält typischerweise einen referenzgezählten Pointer (um die Shallow-Copy-Semantik von LegacyInputIterator zu erfüllen) auf ein Implementierungsobjekt, das

  • einen Container (wie std::vector) von nicht-rekursiven directory_iterators enthält, der den Rekursionsstapel bildet.
  • den Rekursionstiefenzähler enthält (zugänglich mit depth()).
  • die zur Konstruktion verwendeten Verzeichnisoptionen enthält (zugänglich mit options()).
  • das Flag für ausstehende Rekursion enthält (zugänglich mit recursion_pending(), kann zur Platzersparnis mit den Verzeichnisoptionen kombiniert werden).

[edit] Example

#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"

[edit] See also

ein Iterator für den Inhalt des Verzeichnisses
(Klasse) [bearbeiten]
ein Verzeichniseintrag
(Klasse) [bearbeiten]
Optionen für das Iterieren über Verzeichnisinhalte
(Aufzählung) [bearbeiten]