Compartilhar via


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:

  1. um objeto do tipo stack<pair<directory_iterator, path>>, chamado mystack aqui para finalidade de exposição, que representa o aninhamento de diretórios a serem sequenciados.

  2. um objeto do tipo directory_entry, chamado aqui myentry, que representa o nome do arquivo atual na sequência de diretórios.

  3. um objeto do tipo bool, chamado aqui no_push, que registrará se o descendente recursivo em subdiretórios estiver desabilitado.

  4. um objeto do tipo directory_options, chamado aqui myoptions, 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().firste 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:

  1. Um symlink de diretório será examinado somente se você construir um recursive_directory_iterator com um argumento directory_options com valor de directory_options::follow_directory_symlink.

  2. 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++)