Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Descreve um iterador de entrada que sequencia os nomes dos ficheiros num diretório, possivelmente descendo para subdiretórios de forma recursiva. Para um iterador X, a expressão *X avalia para um objeto de classe directory_entry que envolve o nome do ficheiro e tudo o que se sabe sobre o seu estado.
Para mais informações e exemplos de código, consulte Navegação por Sistema de Ficheiros (C++).
Sintaxe
class recursive_directory_iterator;
Observações
O modelo de classe armazena:
um objeto do tipo
stack<pair<directory_iterator, path>>, chamadomystackaqui para fins de exposição, que representa o ninho de diretórios a serem sequenciadosum objeto do tipo
directory_entrychamadomyentryaqui, que representa o nome de ficheiro atual na sequência de diretóriosum objeto do tipo
bool, chamadono_pushaqui, que regista se a descida recursiva em subdiretórios está desativadaum objeto de tipo
directory_options, chamadomyoptionsaqui, que regista as opções estabelecidas na construção
Um objeto construído por defeito de tipo recursive_directory_iterator tem um iterador de fim de sequência em mystack.top().first e representa o iterador de fim de sequência. Por exemplo, dado o diretório abc com entradas def (um diretório), def/ghi, e jkl, o código:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
Vai visitar com os argumentos path("abc/def/ghi") e path("abc/jkl"). Pode qualificar a sequenciação através de uma subárvore de diretórios de duas formas:
Um link simbólico de diretório só será varrido se construir a
recursive_directory_iteratorcom umdirectory_optionsargumento cujo valor sejadirectory_options::follow_directory_symlink.Se chamar
disable_recursion_pending, um diretório subsequente encontrado durante um incremento não será escaneado recursivamente.
Constructors
| Construtor | Descrição |
|---|---|
| recursive_directory_iterator | Constrói um recursive_directory_iterator. |
Funções de membro
| Função de membro | Descrição |
|---|---|
| Profundidade | Retorna mystack.size() - 1, por isso pval está na profundidade zero. |
| disable_recursion_pending | Lojas true em no_push. |
| increment | Avança para o nome de ficheiro seguinte em sequência. |
| Opções | Retorna myoptions. |
| pop | Move o iterador para a próxima entrada na profundidade inferior. |
| recursion_pending | Retorna !no_push. |
Operators
| Operator | Descrição |
|---|---|
| operator!= | Retorna !(*this == right). |
| operador= | Os operadores de atribuição de membros por defeito comportam-se como esperado. |
| operador== | Retorna true apenas se tanto *this a direita como a direita forem iteradores de fim de sequência ou se ambos não forem iteradores de fim de sequência. |
| operador* | Retorna myentry. |
| operador-> | Retorna &**this. |
| operator++ | Incrementa o recursive_directory_iterator. |
Requisitos
Cabeçalho:<filesystem>
Espaço de nomes:std::filesystem
recursive_directory_iterator::d epth
Retorna mystack.size() - 1, por isso pval está na profundidade zero.
int depth() const;
recursive_directory_iterator::d isable_recursion_pending
Lojas true em no_push.
void disable_recursion_pending();
recursive_directory_iterator::incremento
Avança para o nome de ficheiro seguinte em sequência.
recursive_directory_iterator& increment(error_code& ec);
Parameters
ec
Código de erro especificado.
Observações
A função tenta avançar para o próximo nome de ficheiro na sequência aninhada. Se for bem-sucedido, armazena esse nome de ficheiro em myentry; caso contrário, produz um iterador de fim de sequência.
recursive_directory_iterator::operator!=
Retorna !(*this == right).
bool operator!=(const recursive_directory_iterator& right) const;
Parameters
direito
A recursive_directory_iterator para comparação.
recursive_directory_iterator::operator=
Os operadores de atribuição de membros por defeito comportam-se como esperado.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;
Parameters
recursive_directory_iterator
A recursive_directory_iterator a ser copiada no recursive_directory_iterator.
recursive_directory_iterator::operador==
Retorna true apenas se tanto *this a direita como a direita forem iteradores de fim de sequência ou se ambos não forem iteradores de fim de sequência.
bool operator==(const recursive_directory_iterator& right) const;
Parameters
direito
A recursive_directory_iterator para comparação.
recursive_directory_iterator::operador*
Retorna myentry.
const directory_entry& operator*() const;
recursive_directory_iterator::operador->
Retorna &**this.
const directory_entry * operator->() const;
recursive_directory_iterator::operator++
Incrementa o recursive_directory_iterator.
recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);
Parameters
int
Argumento falso. É uma convenção em C++ usada apenas para distinguir o operador de incremento pós-fixo do operador de incremento prefixo. O padrão C++ exige que o formulário postfix aceite um parâmetro int fictício.
Observações
A primeira função membro chama increment(), depois devolve *this. A segunda função membro faz uma cópia do objeto, chama increment(), e depois devolve a cópia.
recursive_directory_iterator::opções
Retorna myoptions.
directory_options options() const;
recursive_directory_iterator::p op
Move o iterador para a próxima entrada na profundidade inferior.
void pop();
void pop(error_code& ec);
Parameters
ec
O código de erro que reporta o estado da operação. A sobrecarga que exige um argumento ec reporta erros em ec em vez de lançar uma exceção.
Observações
Se depth() == 0 o objeto se tornar um iterador de fim de sequência. Caso contrário, a função membro termina a varredura do diretório atual (mais profundo) e retoma na profundidade seguinte inferior.
recursive_directory_iterator::recursion_pending
Retorna !no_push.
bool recursion_pending() const;
recursive_directory_iterator::recursive_directory_iterator
Constrói um 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;
Parameters
Pval
O caminho especificado.
error_code
O código de erro especificado.
OPTs
As opções de diretório especificadas.
recursive_directory_iterator
A recursive_directory_iterator construção recursive_directory_iterator da qual deve ser uma cópia.
Observações
O primeiro construtor produz um iterador de fim de sequência. O segundo e terceiro construtores armazenam false em no_push e directory_options::none em myoptions, depois tentam abrir e ler pval como um diretório. Se for bem-sucedido, inicializam mystack e myentry designam o primeiro nome de ficheiro que não seja diretório na sequência aninhada; caso contrário, produzem um iterador de fim de sequência.
O quarto e o quinto construtores comportam-se da mesma forma que o segundo e o terceiro, exceto que os primeiros opts de armazenamento em myoptions. O construtor padrão comporta-se como esperado.
Ver também
de referência de arquivos de cabeçalho
<sistema de ficheiros>
Navegação do Sistema de Ficheiros (C++)