Classe recursive_directory_iterator
Descreve um iterador de entrada que sequencia os nomes de arquivo em um diretório, possivelmente em ordem decrescente em subdiretórios, recursivamente. Para um iterador X
, a expressão *X
é avaliada como um objeto da classe directory_entry
que encapsula o nome do arquivo e o que for conhecido sobre seu status.
Para obter mais informações e exemplos de código, consulte Navegação do Sistema de Arquivos (C++).
Sintaxe
class recursive_directory_iterator;
Comentários
O modelo de classe armazena:
um objeto do tipo
stack<pair<directory_iterator, path>>
, chamadomystack
aqui para finalidade de exposição, que representa o aninhamento de diretórios a serem sequenciados.um objeto do tipo
directory_entry
, chamado aquimyentry
, que representa o nome do arquivo atual na sequência de diretórios.um objeto do tipo
bool
, chamado aquino_push
, que registrará se o descendente recursivo em subdiretórios estiver desabilitado.um objeto do tipo
directory_options
, chamado aquimyoptions
, que registra as opções estabelecidas na construção.
Um objeto construído padrão do tipo recursive_directory_entry
tem um iterador de final de sequência em mystack.top().first
e representa o iterador de final 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());
chamará a visita com os argumentos path("abc/def/ghi")
epath("abc/jkl")
. É possível qualificar o sequenciamento por meio de uma subárvore de diretório de duas maneiras:
Um symlink de diretório será examinado somente se você construir um
recursive_directory_iterator
com um argumentodirectory_options
com valor dedirectory_options::follow_directory_symlink
.Se você chamar
disable_recursion_pending
, um diretório subsequente encontrado durante um incremento não será examinado recursivamente.
Construtores
Construtor | Descrição |
---|---|
recursive_directory_iterator | Constrói um recursive_directory_iterator . |
Funções de membro
Função de membro | Descrição |
---|---|
depth | Retorna mystack.size() - 1 , portanto, pval está na profundidade zero. |
disable_recursion_pending | Armazena true em no_push . |
increment | Avança para o próximo nome de arquivo na sequência. |
options | Retorna myoptions . |
pop | Retorna o próximo objeto. |
recursion_pending | Retorna !no_push . |
Operadores
Operador | Descrição |
---|---|
operator!= | Retorna !(*this == right) . |
operator= | Os operadores de atribuição de membro usados como padrão se comportam como esperado. |
operator== | Retornará true somente se ambos *this e right forem iteradores de final de sequência ou se ambos não forem iteradores de final de sequência. |
operator* | Retorna myentry . |
operator-> | Retorna &**this . |
operador++ | Incrementa o recursive_directory_iterator . |
Requisitos
Cabeçalho:<filesystem>
Namespace: std::tr2::sys
recursive_directory_iterator::depth
Retorna mystack.size() - 1
, portanto, pval
está na profundidade zero.
int depth() const;
recursive_directory_iterator::disable_recursion_pending
Armazena true
em no_push
.
void disable_recursion_pending();
recursive_directory_iterator::increment
Avança para o próximo nome de arquivo na sequência.
recursive_directory_iterator& increment(error_code& ec) noexcept;
Parâmetros
ec
Código de erro especificado.
Comentários
A função tenta avançar para o próximo nome de arquivo na sequência aninhada. Se for bem-sucedido, armazenará esse nome de arquivo em myentry
, caso contrário, produzirá um iterador de final 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 usados como padrão se comportam como esperado.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;
Parâmetros
recursive_directory_iterator
O recursive_directory_iterator sendo copiado para o recursive_directory_iterator
.
recursive_directory_iterator::operator==
Retornará true
somente se ambos *this
e right forem iteradores de final de sequência ou se ambos não forem iteradores de final 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
O incremento especificado.
Comentários
A primeira função membro chama increment()
e, em seguida, retorna *this
. A segunda função membro copia o objeto, chama increment()
e, em seguida, retorna a cópia.
recursive_directory_iterator::options
Retorna myoptions
.
directory_options options() const;
recursive_directory_iterator::pop
Retorna o próximo objeto.
void pop();
Comentários
Se depth() == 0
, o objeto se tornará um iterador de final de sequência. Caso contrário, a função de membro termina a varredura do diretório atual (mais profundo) e retoma no próximo nível 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;
Parâmetros
pval
O caminho especificado.
error_code
O código de erro especificado.
Opta
As opções de diretório especificadas.
recursive_directory_iterator
O recursive_directory_iterator
do qual o recursive_directory_iterator
construído é uma cópia.
Comentários
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
e, em seguida, tentam abrir e ler pval como um diretório. Se bem-sucedidos, inicializam mystack
e myentry
designar o primeiro nome de arquivo não-diretório na sequência aninhada, caso contrário, produzirão um iterador de final de sequência.
O quarto e o quinto construtores se comportam da mesma maneira que o segundo e o terceiro, exceto que primeiro armazenam opts em myoptions
. O construtor padrão se comporta conforme o esperado.
Confira também
Referência de Arquivos de Cabeçalho
<filesystem>
Navegação no sistema de arquivos (C++)