recursive_directory_iterator-klass

Beskriver en indata iterator som sekvenserar genom filnamnen i en katalog, eventuellt fallande till underkataloger rekursivt. För en iterator Xutvärderas uttrycket *X till ett objekt av klassen directory_entry som omsluter filnamnet och allt som är känt om dess status.

Mer information och kodexempel finns i Filsystemnavigering (C++).

Syntax

class recursive_directory_iterator;

Kommentarer

Klassmallen lagrar:

  1. ett objekt av typen stack<pair<directory_iterator, path>>, som anropas mystack här för exposition, som representerar kapslingen av kataloger som ska sekvenseras

  2. ett objekt av typen directory_entry som heter myentry här, vilket representerar det aktuella filnamnet i katalogsekvensen

  3. ett objekt av typen bool, som anropas no_push här, som registrerar om rekursiv nedstigning i underkataloger är inaktiverat

  4. ett objekt av typen directory_options, som kallas myoptions här, som registrerar de alternativ som har upprättats vid konstruktionen

Ett standardkonstruerat objekt av typen recursive_directory_iterator har en iterator i slutet av sekvensen vid mystack.top().first och representerar iteratorn i slutet av sekvensen. Till exempel med hjälp av katalogen abc med poster def (en katalog), def/ghi, och jkl, koden:

for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
    visit(next->path());

anropar besök med argumenten path("abc/def/ghi") och path("abc/jkl"). Du kan kvalificera sekvensering via ett katalogunderträd på två sätt:

  1. En katalogsymlänk genomsöks endast om du skapar en recursive_directory_iterator med ett directory_options argument vars värde är directory_options::follow_directory_symlink.

  2. Om du anropar disable_recursion_pendinggenomsöks inte en efterföljande katalog som påträffades under en ökning rekursivt.

Constructors

Constructor Beskrivning
recursive_directory_iterator Konstruerar en recursive_directory_iterator.

Medlemsfunktioner

Medlemsfunktion Beskrivning
djup Returnerar mystack.size() - 1, så pval är på djup noll.
disable_recursion_pending Lagrar true i no_push.
increment Går vidare till nästa filnamn i följd.
alternativ Returnerar myoptions.
pop Flyttar iteratorn till nästa post på nästa lägre djup.
recursion_pending Returnerar !no_push.

Operators

Operator Beskrivning
operator!= Returnerar !(*this == right).
operator= Standardoperatorerna för medlemstilldelning fungerar som förväntat.
operator== Returnerar true endast om både *this och höger är iteratorer i slutet av sekvensen eller båda inte är end-of-sequence-iteratorer.
operator* Returnerar myentry.
operator-> Returnerar &**this.
operator++ recursive_directory_iteratorÖkar .

Requirements

rubrik:<filesystem>

Namnområde:std::filesystem

recursive_directory_iterator::d epth

Returnerar mystack.size() - 1, så pval är på djup noll.

int depth() const;

recursive_directory_iterator::d isable_recursion_pending

Lagrar true i no_push.

void disable_recursion_pending();

recursive_directory_iterator::increment

Går vidare till nästa filnamn i följd.

recursive_directory_iterator& increment(error_code& ec);

Parameters

ec
Angiven felkod.

Kommentarer

Funktionen försöker gå vidare till nästa filnamn i den kapslade sekvensen. Om det lyckas lagrar det filnamnet i myentry, annars genererar det en iterator i slutet av sekvensen.

recursive_directory_iterator::operator!=

Returnerar !(*this == right).

bool operator!=(const recursive_directory_iterator& right) const;

Parameters

rätt
Recursive_directory_iterator för jämförelse.

recursive_directory_iterator::operator=

Standardoperatorerna för medlemstilldelning fungerar som förväntat.

recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;

Parameters

recursive_directory_iterator
Den recursive_directory_iterator kopieras till recursive_directory_iterator.

recursive_directory_iterator::operator==

Returnerar true endast om både *this och höger är iteratorer i slutet av sekvensen eller båda inte är end-of-sequence-iteratorer.

bool operator==(const recursive_directory_iterator& right) const;

Parameters

rätt
Recursive_directory_iterator för jämförelse.

recursive_directory_iterator::operator*

Returnerar myentry.

const directory_entry& operator*() const;

recursive_directory_iterator::operator->

Returnerar &**this.

const directory_entry * operator->() const;

recursive_directory_iterator::operator++

recursive_directory_iteratorÖkar .

recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);

Parameters

int
Dummy-argument. Det är en C++-konvention som endast används för att skilja postfixet inkrementsoperatorn från prefixets inkrementsoperator. C++-standarden kräver att postfixformuläret använder en dummy-int-parameter.

Kommentarer

Den första medlemsfunktionen anropar increment()och returnerar *thissedan . Den andra medlemsfunktionen gör en kopia av objektet, anropar increment()och returnerar sedan kopian.

recursive_directory_iterator::options

Returnerar myoptions.

directory_options options() const;

recursive_directory_iterator::p op

Flyttar iteratorn till nästa post på nästa lägre djup.

void pop();
void pop(error_code& ec);

Parameters

ec
Felkoden som rapporterar status för åtgärden. Överlagringen som tar ett ec-argument rapporterar fel i ec i stället för att utlösa ett undantag.

Kommentarer

Om depth() == 0 objektet blir en iterator i slutet av sekvensen. Annars avslutar medlemsfunktionen genomsökningen av den aktuella katalogen (djupaste) och återupptas på nästa lägre djup.

recursive_directory_iterator::recursion_pending

Returnerar !no_push.

bool recursion_pending() const;

recursive_directory_iterator::recursive_directory_iterator

Konstruerar en 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
Den angivna sökvägen.

error_code
Den angivna felkoden.

opts
De angivna katalogalternativen.

recursive_directory_iterator
Vars recursive_directory_iterator konstruktion recursive_directory_iterator ska vara en kopia.

Kommentarer

Den första konstruktorn skapar en iterator i slutet av sekvensen. Den andra och tredje konstruktorn lagrar false i no_push och directory_options::none i myoptionsoch försöker sedan öppna och läsa pval som en katalog. Om det lyckas initierar mystack de och myentry anger det första filnamnet som inte är katalog i den kapslade sekvensen. Annars skapar de en iterator i slutet av sekvensen.

Den fjärde och femte konstruktorn beter sig på samma sätt som den andra och tredje, förutom att de först lagrar opts i myoptions. Standardkonstruktorn fungerar som förväntat.

Se även

referens för huvudfiler
<filesystem>
Filsystemnavigering (C++)