Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questo articolo descrive la recursive_directory_iterator classe dall'implementazione prendard <experimental/filesystem> di ISO C++ Filesystem Technical Specification (N4100). Questa API non corrisponde alla classe C++17 recursive_directory_iterator in <filesystem>. Usa firme diverse, tra cui una noexceptincrement e una maschera pop singola senza overload error_code . L'implementazione sperimentale è stata rimossa a partire dal set di strumenti Microsoft Visual C++ (MSVC) 14.51. Il nuovo codice deve usare invece la classe C++17 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.
Sintassi
class recursive_directory_iterator;
Osservazioni
La classe archivia:
oggetto di tipo
stack<pair<directory_iterator, path>>, chiamatomystackqui ai fini dell'esposizione, che rappresenta il nido di directory da sequenziareoggetto di tipo
directory_entrydenominatomyentryqui, che rappresenta il nome file corrente nella sequenza di directoryoggetto di tipo
bool, denominatono_pushqui, che registra se la discesa ricorsiva in sottodirectory è disabilitataoggetto di tipo
directory_options, denominatomyoptionsqui, che registra le opzioni stabilite in fase di costruzione
Un oggetto costruito per impostazione predefinita di tipo recursive_directory_iterator ha un iteratore di fine sequenza in corrispondenza mystack.top().first di e 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());
chiama 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 viene analizzato solo se si costruisce un
recursive_directory_iteratoroggetto con undirectory_optionsargomento il cui valore èdirectory_options::follow_directory_symlink.Se si chiama
disable_recursion_pending, una directory successiva rilevata durante un incremento non viene analizzata in modo ricorsivo.
Constructors
| Costruttore | Descrizione |
|---|---|
| recursive_directory_iterator | Costruisce un oggetto recursive_directory_iterator. |
Funzioni membro
| Funzione membro | Descrizione |
|---|---|
| profondità | 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. |
| Opzioni | Restituisce myoptions. |
| pop | Sposta l'iteratore alla voce successiva alla profondità inferiore successiva. |
| recursion_pending | Restituisce !no_push. |
Operators
| Operatore | Descrizione |
|---|---|
| operator!= | Restituisce !(*this == right). |
| operator= | Gli operatori di assegnazione dei membri 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. |
Requirements
Intestazione:<experimental/filesystem>
Spazio dei nomi:std::experimental::filesystem
recursive_directory_iterator::d epth
Restituisce mystack.size() - 1, quindi pval è a profondità zero.
int depth() const;
recursive_directory_iterator::d isable_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
ec
Codice di errore specificato.
Osservazioni
La funzione tenta di passare al nome file successivo nella sequenza nidificata. 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
Oggetto recursive_directory_iterator per il confronto.
recursive_directory_iterator::operator=
Gli operatori di assegnazione dei membri predefiniti si comportano come previsto.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;
Parametri
recursive_directory_iterator
Oggetto recursive_directory_iterator copiato in recursive_directory_iterator.
recursive_directory_iterator::operator==
Restituisce true solo se entrambi *this e destra sono iteratori end-of-sequence o entrambi non sono iteratori di fine sequenza.
bool operator==(const recursive_directory_iterator& right) const;
Parametri
right
Oggetto 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
Argomento fittizio. Si tratta di una convenzione C++ usata solo per distinguere l'operatore di incremento del prefisso dall'operatore di incremento del prefisso. Lo standard C++ richiede che il formato del prefisso assuma un parametro int fittizio.
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::p op
Sposta l'iteratore alla voce successiva alla profondità inferiore successiva.
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 (più profonda) e riprende alla 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,
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;
Parametri
pval
Percorso specificato.
error_code
Codice di errore specificato.
opts
Opzioni di directory specificate.
recursive_directory_iterator
Oggetto recursive_directory_iterator di cui l'oggetto costruito recursive_directory_iterator deve essere una copia.
Osservazioni
Il primo costruttore crea un iteratore di fine sequenza. Il secondo costruttore archivia falseno_push e acconsente esplicitamente a myoptions, quindi tenta di aprire e leggere pval come directory. Se ha esito positivo, inizializza mystack e myentry punta al primo nome file non di directory nella sequenza nidificata. Se ha esito negativo, crea un iteratore di fine sequenza.
Il terzo e il quarto costruttore si comportano come il secondo, ad eccezione del fatto che segnalano errori in ec anziché generare un'eccezione. Il quarto costruttore archivia directory_options::none in myoptions. Il costruttore predefinito si comporta come previsto.