<experimental/filesystem> recursive_directory_iterator classe

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:

  1. um objeto de tipo stack<pair<directory_iterator, path>>, chamado mystack aqui para fins de exposição, que representa o aninhamento de diretórios para sequência

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

  3. um objeto do tipo bool, chamado no_push aqui, que registra se a descida recursiva em subdiretórios está desabilitada

  4. um objeto de tipo directory_options, chamado myoptions aqui, 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:

  1. Um symlink de diretório é verificado somente se você construir um recursive_directory_iterator com um directory_options argumento cujo valor é directory_options::follow_directory_symlink.

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

Consulte também

<experimental/filesystem>
directory_entry classe