<experimental/filesystem> recursive_directory_iterator klasa

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:

  1. obiekt typu stack<pair<directory_iterator, path>>, wywoływany mystack tutaj do celów ekspozycji, który reprezentuje gniazdo katalogów do sekwencji

  2. obiekt typu directory_entry o nazwie myentry tutaj, który reprezentuje bieżącą nazwę pliku w sekwencji katalogów

  3. obiekt typu bool, o nazwie no_push tutaj, który rejestruje, czy rekursywne zejście do podkatalogów jest wyłączone

  4. obiekt typu directory_options, o nazwie myoptions tutaj, 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:

  1. Link do katalogu jest skanowany tylko w przypadku konstruowania recursive_directory_iterator elementu z argumentem directory_options , którego wartość to directory_options::follow_directory_symlink.

  2. 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.

Zobacz także

<experimental/filesystem>
directory_entry klasa