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.
Important
W tym artykule opisano klasę recursive_directory_iterator ze wstępniestandardowej <experimental/filesystem> implementacji specyfikacji technicznej systemu plików ISO C++ (N4100). Ten interfejs API nie jest taki sam jak klasa C++17 recursive_directory_iterator w systemie <filesystem>. Używa różnych podpisów, w tym pojedynczego noexceptincrement formularza pop i bez error_code przeciążenia. Implementacja eksperymentalna została usunięta, począwszy od zestawu narzędzi Microsoft Visual C++ (MSVC) 14.51. Nowy kod powinien zamiast tego używać klasy C++17 recursive_directory_iterator .
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 zwraca obiekt klasy directory_entry , który opakowuje nazwę pliku i wszystkie znane informacje o jego stanie.
Składnia
class recursive_directory_iterator;
Uwagi
Magazyny klas:
obiekt typu
stack<pair<directory_iterator, path>>, wywoływanymystacktutaj do celów ekspozycji, który reprezentuje gniazdo katalogów do sekwencjiobiekt 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łuje visit argumenty path("abc/def/ghi") i path("abc/jkl"). Sekwencjonowanie można kwalifikować za pomocą poddrzewa katalogu na dwa sposoby:
Link do katalogu jest skanowany tylko w przypadku konstruowania
recursive_directory_iteratorelementu z argumentemdirectory_options, którego wartość todirectory_options::follow_directory_symlink.Jeśli wywołasz
disable_recursion_pendingmetodę , kolejny katalog napotkany podczas przyrostu nie jest cyklicznie skanowany.
Constructors
| 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. |
| increment | 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. |
Operatorów
| 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 end-of-sequence 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:<experimental/filesystem>
Przestrzeń nazw: std::experimental::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) noexcept;
Parameters
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;
Parameters
prawo
Dla recursive_directory_iterator 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&&) = default;
Parameters
recursive_directory_iterator
Element recursive_directory_iterator kopiowany 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 końca sekwencji.
bool operator==(const recursive_directory_iterator& right) const;
Parameters
prawo
Dla recursive_directory_iterator 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);
Parameters
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();
Uwagi
Jeśli depth() == 0obiekt 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,
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;
Parameters
pval
Określona ścieżka.
error_code
Określony kod błędu.
opts (opts)
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. Drugi konstruktor przechowuje false element no_push i wybieramyoptionselement , a następnie próbuje otworzyć i odczytać pval jako katalog. Jeśli zakończy się pomyślnie, inicjuje mystack i myentry wskazuje pierwszą nazwę pliku innego niż katalog w zagnieżdżonej sekwencji. W przypadku niepowodzenia program tworzy iterator końca sekwencji.
Trzeci i czwarty konstruktor zachowuje się tak samo jak drugi, z tą różnicą, że zgłaszają błędy we zamiast zgłaszać wyjątek. Czwarty konstruktor przechowuje directory_options::none element w pliku myoptions. Domyślny konstruktor zachowuje się zgodnie z oczekiwaniami.