<experimental/filesystem> recursive_directory_iterator-klass

Important

Den här artikeln beskriver recursive_directory_iterator klassen från den förstandardimplementering <experimental/filesystem> av ISO C++ Filesystem Technical Specification (N4100). Det här API:et är inte samma som klassen C++17 recursive_directory_iterator i <filesystem>. Den använder olika signaturer, inklusive ett noexceptincrement och ett formulär pop utan error_code överlagring. Den experimentella implementeringen togs bort från och med verktygsuppsättningen Microsoft Visual C++ (MSVC) 14.51. Ny kod bör använda klassen C++17 recursive_directory_iterator i stället.

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

Syntax

class recursive_directory_iterator;

Kommentarer

Klassen lagrar:

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

  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 visit 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 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:<experimental/filesystem>

Namnområde:std::experimental::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) noexcept;

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
För recursive_directory_iterator 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&&) = default;

Parameters

recursive_directory_iterator
Som 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 om båda inte är iteratorer i slutet av sekvensen.

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

Parameters

rätt
För recursive_directory_iterator 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();

Kommentarer

Om depth() == 0blir objektet 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,
    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;

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 konstruktorn lagrar false och no_pushväljer i myoptionsoch försöker sedan öppna och läsa pval som en katalog. Om den lyckas initieras mystack och myentry pekar den på det första filnamnet som inte är katalog i den kapslade sekvensen. Om den misslyckas skapar den en iterator i slutet av sekvensen.

Den tredje och fjärde konstruktorn beter sig på samma sätt som den andra, förutom att de rapporterar fel i ec i stället för att utlösa ett undantag. Den fjärde konstruktorn lagrar directory_options::none i myoptions. Standardkonstruktorn fungerar som förväntat.

Se även

<experimental/filesystem>
directory_entry klass