Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Opisuje iterator wejściowy, który sekwencjonuje nazwy plików w katalogu, prawdopodobnie malejąco do podkatalogów rekursywnie. W przypadku iteratora Xwyrażenie *X oblicza obiekt klasy directory_entry , który opakowuje nazwę pliku i wszystkie znane informacje o jego stanie.
Aby uzyskać więcej informacji i przykłady kodu, zobacz Nawigacja systemu plików (C++).
Składnia
class recursive_directory_iterator;
Uwagi
Szablon klasy przechowuje:
obiekt typu
stack<pair<directory_iterator, path>>, wywoływanymystacktutaj do celów ekspozycji, który reprezentuje gniazdo katalogów do sekwencjonowaniaobiekt typu
directory_entryo nazwiemyentrytutaj, który reprezentuje bieżącą nazwę pliku w sekwencji katalogówobiekt typu
bool, o nazwieno_pushtutaj, który rejestruje, czy rekursywne zejście do podkatalogów jest wyłączoneobiekt typu
directory_options, o nazwiemyoptionstutaj, który rejestruje opcje ustanowione w budowie
Obiekt typu skonstruowany recursive_directory_iterator domyślnie ma iterator końca sekwencji i mystack.top().first reprezentuje iterator końca sekwencji. Na przykład, biorąc pod uwagę katalog abc z wpisami def (katalog), def/ghii jkl, kod:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
wywoła wizytę z argumentami path("abc/def/ghi") i path("abc/jkl"). Sekwencjonowanie można kwalifikować za pomocą poddrzewa katalogu na dwa sposoby:
Link katalogu zostanie przeskanowany tylko wtedy, gdy skonstruujesz
recursive_directory_iteratorelement z argumentemdirectory_options, którego wartość todirectory_options::follow_directory_symlink.Jeśli wywołasz
disable_recursion_pendingmetodę , kolejny katalog napotkany podczas przyrostu nie będzie rekursywnie skanowany.
Konstruktory
| Konstruktor | opis |
|---|---|
| recursive_directory_iterator | Tworzy element recursive_directory_iterator. |
Funkcje składowe
| Funkcja składowa | opis |
|---|---|
| głębokość | Zwraca wartość mystack.size() - 1, więc pval jest równa zero głębokości. |
| disable_recursion_pending | Sklepy true w programie no_push. |
| wzrost | Przechodzi do następnej nazwy pliku w sekwencji. |
| Opcje | Zwraca wartość myoptions. |
| Pop | Przenosi iterator do następnego wpisu w następnej dolnej głębokości. |
| recursion_pending | Zwraca wartość !no_push. |
Operatory
| Operator | opis |
|---|---|
| operator!= | Zwraca wartość !(*this == right). |
| operator = | Domyślne operatory przypisania składowych zachowują się zgodnie z oczekiwaniami. |
| operator== | Zwraca wartość true tylko wtedy, gdy obie *this i prawa są iteratorami końca sekwencji lub obie nie są iteratorami typu end-of-sequence. |
| operator* | Zwraca wartość myentry. |
| operator-> | Zwraca wartość &**this. |
| operator++ | Zwiększa wartość .recursive_directory_iterator |
Wymagania
Nagłówek:<filesystem>
Przestrzeń nazw: std::filesystem
recursive_directory_iterator::d epth
Zwraca wartość mystack.size() - 1, więc pval jest równa zero głębokości.
int depth() const;
recursive_directory_iterator::d isable_recursion_pending
Sklepy true w programie no_push.
void disable_recursion_pending();
recursive_directory_iterator::inkrementacja
Przechodzi do następnej nazwy pliku w sekwencji.
recursive_directory_iterator& increment(error_code& ec);
Parametry
Ec
Określony kod błędu.
Uwagi
Funkcja próbuje przejść do następnej nazwy pliku w zagnieżdżonej sekwencji. Jeśli to się powiedzie, przechowuje nazwę pliku w myentrypliku ; w przeciwnym razie tworzy iterator końca sekwencji.
recursive_directory_iterator::operator!=
Zwraca wartość !(*this == right).
bool operator!=(const recursive_directory_iterator& right) const;
Parametry
Prawy
Recursive_directory_iterator do porównania.
recursive_directory_iterator::operator=
Domyślne operatory przypisania składowych zachowują się zgodnie z oczekiwaniami.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;
Parametry
recursive_directory_iterator
Recursive_directory_iterator kopiowane do pliku recursive_directory_iterator.
recursive_directory_iterator::operator==
Zwraca wartość true tylko wtedy, gdy obie *this i prawa są iteratorami końca sekwencji lub obie nie są iteratorami typu end-of-sequence.
bool operator==(const recursive_directory_iterator& right) const;
Parametry
Prawy
Recursive_directory_iterator do porównania.
recursive_directory_iterator::operator*
Zwraca wartość myentry.
const directory_entry& operator*() const;
recursive_directory_iterator::operator—>
Zwraca wartość &**this.
const directory_entry * operator->() const;
recursive_directory_iterator::operator++
Zwiększa wartość .recursive_directory_iterator
recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);
Parametry
int
Fikcyjny argument. Jest to konwencja języka C++ używana tylko do odróżnienia operatora przyrostka postfiksu od operatora przyrostu prefiksu. Standard C++ wymaga, aby formularz postfiksu przyjmować fikcyjny parametr int.
Uwagi
Pierwsza funkcja składowa wywołuje metodę increment(), a następnie zwraca wartość *this. Druga funkcja składowa tworzy kopię obiektu, wywołuje increment()metodę , a następnie zwraca kopię.
recursive_directory_iterator::options
Zwraca wartość myoptions.
directory_options options() const;
recursive_directory_iterator::p op
Przenosi iterator do następnego wpisu w następnej dolnej głębokości.
void pop();
void pop(error_code& ec);
Parametry
ec
Kod błędu, który zgłasza stan operacji. Przeciążenie, które przyjmuje argument ec zgłasza błędy we zamiast zgłaszać wyjątek.
Uwagi
Jeśli depth() == 0 obiekt stanie się iteratorem końca sekwencji. W przeciwnym razie funkcja składowa kończy skanowanie bieżącego (najgłębszego) katalogu i wznawia działanie w następnej dolnej głębokości.
recursive_directory_iterator::recursion_pending
Zwraca wartość !no_push.
bool recursion_pending() const;
recursive_directory_iterator::recursive_directory_iterator
Tworzy element 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;
Parametry
pval
Określona ścieżka.
error_code
Określony kod błędu.
Zdecyduje się
Określone opcje katalogu.
recursive_directory_iterator
Element recursive_directory_iterator , którego konstrukcja recursive_directory_iterator ma być kopią.
Uwagi
Pierwszy konstruktor tworzy iterator końca sekwencji. Drugie i trzecie konstruktory przechowują false w systemach i no_push w directory_options::nonemyoptionspliku , a następnie próbują otworzyć i odczytać pval jako katalog. W przypadku pomyślnego zainicjowania mystack i myentry wyznaczenia pierwszej nazwy pliku innej niż katalog w zagnieżdżonej sekwencji; w przeciwnym razie tworzą iterator końca sekwencji.
Czwarte i piąte konstruktory zachowują się tak samo jak drugi i trzeci, z tą różnicą, że pierwszy sklep myoptions Domyślny konstruktor zachowuje się zgodnie z oczekiwaniami.
Zobacz też
Odwołanie do plików nagłówka
<system plików>
Nawigacja systemu plików (C++)