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:
oggetto di tipo
stack<pair<directory_iterator, path>>
, chiamatomystack
qui ai fini dell'esposizione, che rappresenta il nido di directory da sequenziareoggetto di tipo
directory_entry
denominatomyentry
qui, che rappresenta il nome file corrente nella sequenza di directoryoggetto di tipo
bool
, denominatono_push
qui, che registra se la discesa ricorsiva in sottodirectory è disabilitataoggetto di tipo
directory_options
, denominatomyoptions
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/ghi
e 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:
Un collegamento simbolico della directory verrà analizzato solo se si costruisce un
recursive_directory_iterator
oggetto con undirectory_options
argomento il cui valore èdirectory_options::follow_directory_symlink
.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++)