Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Important
Este artigo descreve a recursive_directory_iterator classe da implementação pré-teste <experimental/filesystem> da Especificação Técnica do Sistema de Arquivos ISO C++ (N4100). Essa API não é a mesma da classe C++17 recursive_directory_iterator em <filesystem>. Ele usa assinaturas diferentes, incluindo um e um noexceptincrement formulário pop único sem error_code sobrecarga. A implementação experimental foi removida a partir do conjunto de ferramentas do Microsoft Visual C++ (MSVC) 14.51. Em vez disso, o novo código deve usar a classe C++17 recursive_directory_iterator .
Descreve um iterador de entrada que sequencia por meio dos nomes de arquivo em um diretório, possivelmente decrescente em subdiretórios recursivamente. Para um iterador X, a expressão *X retorna um objeto de classe directory_entry que encapsula o nome do arquivo e qualquer coisa conhecida sobre seu status.
Sintaxe
class recursive_directory_iterator;
Observações
As classes armazenam:
um objeto de tipo
stack<pair<directory_iterator, path>>, chamadomystackaqui para fins de exposição, que representa o aninhamento de diretórios para sequênciaum objeto do tipo
directory_entrychamadomyentryaqui, que representa o nome do arquivo atual na sequência de diretóriosum objeto do tipo
bool, chamadono_pushaqui, que registra se a descida recursiva em subdiretórios está desabilitadaum objeto de tipo
directory_options, chamadomyoptionsaqui, que registra as opções estabelecidas na construção
Um objeto de tipo recursive_directory_iterator construído por padrão tem um iterador mystack.top().first de fim de sequência e representa o iterador de fim de sequência. Por exemplo, dado o diretório abc com entradas def (um diretório) def/ghie jklo código:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
chamadas visit com os argumentos path("abc/def/ghi") e path("abc/jkl"). Você pode qualificar o sequenciamento por meio de uma subárvore de diretório de duas maneiras:
Um symlink de diretório é verificado somente se você construir um
recursive_directory_iteratorcom umdirectory_optionsargumento cujo valor édirectory_options::follow_directory_symlink.Se você chamar
disable_recursion_pending, um diretório subsequente encontrado durante um incremento não será verificado recursivamente.
Constructors
| Construtor | Description |
|---|---|
| recursive_directory_iterator | Constrói um recursive_directory_iterator. |
Funções de membro
| Função de membro | Description |
|---|---|
| de profundidade | Retorna mystack.size() - 1, portanto pval , está na profundidade zero. |
| disable_recursion_pending | Lojas true em no_push. |
| increment | Avança para o próximo nome de arquivo em sequência. |
| Opções | Retorna myoptions. |
| pop | Move o iterador para a próxima entrada na próxima profundidade inferior. |
| recursion_pending | Retorna !no_push. |
Operadores
| Operador | Description |
|---|---|
| operator!= | Retorna !(*this == right). |
| operator= | Os operadores de atribuição de membro padrão se comportam conforme o esperado. |
| operator== | Retorna true somente se ambos *this e à direita forem iteradores de fim de sequência ou ambos não forem iteradores de fim de sequência. |
| operador* | Retorna myentry. |
| operador-> | Retorna &**this. |
| operador++ | Incrementa o recursive_directory_iterator. |
Requirements
Cabeçalho:<experimental/filesystem>
Namespace:std::experimental::filesystem
recursive_directory_iterator::d epth
Retorna mystack.size() - 1, portanto 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 próximo nome de arquivo em sequência.
recursive_directory_iterator& increment(error_code& ec) noexcept;
Parâmetros
ec
Código de erro especificado.
Observações
A função tenta avançar para o próximo nome de arquivo na sequência aninhada. Se tiver êxito, ele armazenará esse nome de arquivo myentry; caso contrário, ele produzirá um iterador de fim de sequência.
recursive_directory_iterator::operator!=
Retorna !(*this == right).
bool operator!=(const recursive_directory_iterator& right) const;
Parâmetros
direita
O recursive_directory_iterator para comparação.
recursive_directory_iterator::operator=
Os operadores de atribuição de membro padrão se comportam conforme o esperado.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;
Parâmetros
recursive_directory_iterator
O recursive_directory_iterator que está sendo copiado para o recursive_directory_iterator.
recursive_directory_iterator::operator==
Retorna true somente se ambos *this e à direita forem iteradores de fim de sequência ou ambos não forem iteradores de fim de sequência.
bool operator==(const recursive_directory_iterator& right) const;
Parâmetros
direita
O recursive_directory_iterator para comparação.
recursive_directory_iterator::operator*
Retorna myentry.
const directory_entry& operator*() const;
recursive_directory_iterator::operator->
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);
Parâmetros
int
Argumento fictício. É uma convenção C++ usada apenas para distinguir o operador de incremento de postfixo do operador de incremento de prefixo. O padrão C++ requer o formulário de postfixo para usar um parâmetro de int fictício.
Observações
A primeira função membro chama increment()e retorna *this. A segunda função membro faz uma cópia do objeto, chama increment()e retorna a cópia.
recursive_directory_iterator::options
Retorna myoptions.
directory_options options() const;
recursive_directory_iterator::p op
Move o iterador para a próxima entrada na próxima profundidade inferior.
void pop();
Observações
Se depth() == 0o objeto se tornar um iterador de fim de sequência. Caso contrário, a função membro encerrará a verificação do diretório atual (mais profundo) e será retomada na próxima profundidade 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,
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;
Parâmetros
pval
O caminho especificado.
error_code
O código de erro especificado.
opts
As opções de diretório especificadas.
recursive_directory_iterator
O recursive_directory_iterator que o construtor recursive_directory_iterator deve ser uma cópia.
Observações
O primeiro construtor cria um iterador de fim de sequência. O segundo construtor armazena falseno_push e aceitamyoptions, em seguida, tenta abrir e ler pval como um diretório. Se for bem-sucedido, ele será inicializado mystack e myentry apontará para o primeiro nome de arquivo não diretório na sequência aninhada. Se falhar, ele criará um iterador de fim de sequência.
O terceiro e o quarto construtores se comportam da mesma forma que o segundo, exceto que eles relatam erros em ec em vez de gerar uma exceção. O quarto construtor armazena directory_options::none em myoptions. O construtor padrão se comporta conforme o esperado.