Condividi tramite


Classe recursive_directory_iterator

Descrive un iteratore di input che esegue la sequenza dei nomi file in una directory, possibilmente decrescente in sottodirectory in modo ricorsivo. Per un iteratore X, l'espressione *X restituisce un oggetto della classe directory_entry che esegue il wrapping del nome file e qualsiasi elemento noto sul relativo stato.

Per altre informazioni ed esempi di codice, vedere File System Navigation (C++) (Esplorazione del file system (C++)).

Sintassi

class recursive_directory_iterator;

Osservazioni:

Il modello di classe archivia:

  1. oggetto di tipo stack<pair<directory_iterator, path>>, chiamato mystack qui ai fini dell'esposizione, che rappresenta il nido di directory da sequenziare

  2. oggetto di tipo directory_entry denominato myentry qui, che rappresenta il nome file corrente nella sequenza di directory

  3. oggetto di tipo bool, denominato no_push qui, che registra se la discesa ricorsiva in sottodirectory è disabilitata

  4. oggetto di tipo directory_options, denominato myoptions qui, che registra le opzioni stabilite in fase di costruzione

Un oggetto costruito predefinito di tipo recursive_directory_entry ha un iteratore di fine sequenza in e mystack.top().first rappresenta l'iteratore di fine sequenza. Ad esempio, data la directory abc con voci def (una directory), def/ghie jkl, il codice:

for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
    visit(next->path());

chiamerà visit con gli path("abc/def/ghi") argomenti e path("abc/jkl"). È possibile qualificare la sequenziazione tramite un sottoalbero di directory in due modi:

  1. Un collegamento simbolico della directory verrà analizzato solo se si costruisce un recursive_directory_iterator oggetto con un directory_options argomento il cui valore è directory_options::follow_directory_symlink.

  2. Se si chiama disable_recursion_pending, una directory successiva rilevata durante un incremento non verrà analizzata in modo ricorsivo.

Costruttori

Costruttore Descrizione
recursive_directory_iterator Costruisce un oggetto recursive_directory_iterator.

Funzioni membro

Funzione membro Descrizione
depth Restituisce mystack.size() - 1, quindi pval è a profondità zero.
disable_recursion_pending Archivia true in no_push.
increment Passa al nome file successivo in sequenza.
options Restituisce myoptions.
pop Restituisce l'oggetto successivo.
recursion_pending Restituisce !no_push.

Operatori

Operatore Descrizione
operator!= Restituisce !(*this == right).
operator= Gli operatori di assegnazione membro impostati come predefiniti si comportano come previsto.
operator== Restituisce true solo se entrambi *this e destra sono iteratori di fine sequenza o entrambi non sono iteratori end-of-sequence-iterator.
operator* Restituisce myentry.
operator-> Restituisce &**this.
operator++ Incrementa l'oggetto recursive_directory_iterator.

Requisiti

Header:<filesystem>

Spazio dei nomi: std::tr2::sys

recursive_directory_iterator::depth

Restituisce mystack.size() - 1, quindi pval è a profondità zero.

int depth() const;

recursive_directory_iterator::disable_recursion_pending

Archivia true in no_push.

void disable_recursion_pending();

recursive_directory_iterator::increment

Passa al nome file successivo in sequenza.

recursive_directory_iterator& increment(error_code& ec) noexcept;

Parametri

Ce
Codice di errore specificato.

Osservazioni:

La funzione prova ad avanzare al nome file successivo nella sequenza annidata. In caso di esito positivo, archivia il nome file in myentry; in caso contrario, produce un iteratore di fine sequenza.

recursive_directory_iterator::operator!=

Restituisce !(*this == right).

bool operator!=(const recursive_directory_iterator& right) const;

Parametri

right
Recursive_directory_iterator per il confronto.

recursive_directory_iterator::operator=

Gli operatori di assegnazione membro impostati come predefiniti si comportano come previsto.

recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;

Parametri

recursive_directory_iterator
Il recursive_directory_iterator copiato in recursive_directory_iterator.

recursive_directory_iterator::operator==

Restituisce true solo se entrambi *this e destra sono iteratori di fine sequenza o entrambi non sono iteratori end-of-sequence-iterator.

bool operator==(const recursive_directory_iterator& right) const;

Parametri

right
Recursive_directory_iterator per il confronto.

recursive_directory_iterator::operator*

Restituisce myentry.

const directory_entry& operator*() const;

recursive_directory_iterator::operator->

Restituisce &**this.

const directory_entry * operator->() const;

recursive_directory_iterator::operator++

Incrementa l'oggetto recursive_directory_iterator.

recursive_directory_iterator& operator++();

recursive_directory_iterator& operator++(int);

Parametri

int
Incremento specificato.

Osservazioni:

La prima funzione membro chiama increment(), quindi restituisce *this. La seconda funzione membro crea una copia dell'oggetto, chiama increment(), quindi restituisce la copia.

recursive_directory_iterator::options

Restituisce myoptions.

directory_options options() const;

recursive_directory_iterator::pop

Restituisce l'oggetto successivo.

void pop();

Osservazioni:

Se depth() == 0 l'oggetto diventa un iteratore di fine sequenza. In caso contrario, la funzione membro termina l'analisi della directory corrente (la più profonda) e riprende dalla profondità inferiore successiva.

recursive_directory_iterator::recursion_pending

Restituisce !no_push.

bool recursion_pending() const;

recursive_directory_iterator::recursive_directory_iterator

Costruisce un oggetto 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;

Parametri

pval
Percorso specificato.

error_code
Codice di errore specificato.

Opta
Opzioni di directory specificate.

recursive_directory_iterator
Oggetto recursive_directory_iterator di cui l'oggetto recursive_directory_iterator costruito deve essere una copia.

Osservazioni:

Il primo costruttore produce un iteratore di fine sequenza. Il secondo e il terzo costruttore archivia false in no_push e directory_options::none in myoptions, quindi tenta di aprire e leggere pval come directory. In caso di esito positivo, inizializzano mystack e myentry designano il primo nome file non di directory nella sequenza nidificata; in caso contrario, producono un iteratore di fine sequenza.

Il quarto e il quinto costruttore si comportano come il secondo e il terzo, ad eccezione del fatto che prima archiviano il consenso esplicito in myoptions. Il costruttore predefinito si comporta come previsto.

Vedi anche

Riferimento file di intestazione
<filesystem>
Esplorazione del file system (C++)