Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
ett objekt av typen
stack<pair<directory_iterator, path>>, som anropasmystackhär för exposition, som representerar det kapslade kataloger som ska sekvensasett objekt av typen
directory_entrysom hetermyentryhär, vilket representerar det aktuella filnamnet i katalogsekvensenett objekt av typen
bool, som anropasno_pushhär, som registrerar om rekursiv nedstigning i underkataloger är inaktiveratett objekt av typen
directory_options, som kallasmyoptionshä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:
En katalogsymlänk genomsöks endast om du skapar en
recursive_directory_iteratormed ettdirectory_optionsargument vars värde ärdirectory_options::follow_directory_symlink.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.