<experimental/filesystem> recursive_directory_iterator classe

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:

  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 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:

  1. Un collegamento simbolico della directory viene 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 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.

Vedere anche

<experimental/filesystem>
directory_entry classe