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.
Importante
Este artigo descreve a recursive_directory_iterator classe da implementação pré-padrão <experimental/filesystem> da Especificação Técnica do Sistema de Ficheiros ISO C++ (N4100). Esta API não é a mesma que a classe C++17 recursive_directory_iterator em <filesystem>. Utiliza diferentes assinaturas, incluindo uma noexceptincrement e uma forma pop única, sem error_code sobrecarga. A implementação experimental foi removida a partir do conjunto de ferramentas Microsoft Visual C++ (MSVC) 14.51. O novo código deve usar a classe C++17 recursive_directory_iterator em vez disso.
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 devolve um objeto de classe directory_entry que envolve o nome do ficheiro e tudo o que se sabe sobre o seu estado.
Sintaxe
class recursive_directory_iterator;
Observações
A 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 sequenciarum 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());
visit chamadas 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 symlink de diretório é escaneado apenas 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 é 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:<experimental/filesystem>
Espaço de nomes:std::experimental::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) noexcept;
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
Para recursive_directory_iterator 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&&) = default;
Parameters
recursive_directory_iterator
O recursive_directory_iterator ser copiado para o 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
Para recursive_directory_iterator 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();
Observações
Se depth() == 0, o objeto torna-se 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,
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;
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 cria um iterador de fim de sequência. O segundo construtor armazena false e no_pushopta por , myoptionsdepois tenta abrir e ler pval como diretório. Se tiver sucesso, inicializa mystack e myentry aponta para o primeiro nome de ficheiro que não seja diretório na sequência aninhada. Se falhar, cria-se um iterador de fim de sequência.
O terceiro e o quarto construtores comportam-se da mesma forma que o segundo, exceto que reportam erros em ec em vez de lançar uma exceção. O quarto construtor armazena directory_options::none em myoptions. O construtor padrão comporta-se como esperado.