recursive_directory_iterator Classe

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 avalia para um objeto de classe directory_entry que envolve o nome do ficheiro e tudo o que se sabe sobre o seu estado.

Para mais informações e exemplos de código, consulte Navegação por Sistema de Ficheiros (C++).

Sintaxe

class recursive_directory_iterator;

Observações

O modelo de classe armazena:

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

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

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

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

Vai visitar 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:

  1. Um link simbólico de diretório só será varrido se construir a recursive_directory_iterator com um directory_options argumento cujo valor seja directory_options::follow_directory_symlink.

  2. Se chamar disable_recursion_pending, um diretório subsequente encontrado durante um incremento não será 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:<filesystem>

Espaço de nomes:std::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);

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
A recursive_directory_iterator para 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&&) noexcept = default;

Parameters

recursive_directory_iterator
A recursive_directory_iterator a ser copiada no 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
A recursive_directory_iterator para 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();
void pop(error_code& ec);

Parameters

ec
O código de erro que reporta o estado da operação. A sobrecarga que exige um argumento ec reporta erros em ec em vez de lançar uma exceção.

Observações

Se depth() == 0 o objeto se tornar 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);

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;

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 produz um iterador de fim de sequência. O segundo e terceiro construtores armazenam false em no_push e directory_options::none em myoptions, depois tentam abrir e ler pval como um diretório. Se for bem-sucedido, inicializam mystack e myentry designam o primeiro nome de ficheiro que não seja diretório na sequência aninhada; caso contrário, produzem um iterador de fim de sequência.

O quarto e o quinto construtores comportam-se da mesma forma que o segundo e o terceiro, exceto que os primeiros opts de armazenamento em myoptions. O construtor padrão comporta-se como esperado.

Ver também

de referência de arquivos de cabeçalho
<sistema de ficheiros>
Navegação do Sistema de Ficheiros (C++)