Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Important
In dit artikel wordt de recursive_directory_iterator klasse van de vooraf gedefinieerde <experimental/filesystem> implementatie van de technische specificatie van het ISO C++-bestandssysteem (N4100) beschreven. Deze API is niet hetzelfde als de C++17-klasse recursive_directory_iterator in <filesystem>. Er worden verschillende handtekeningen gebruikt, waaronder een noexceptincrement en een enkel formulier pop zonder error_code overbelasting. De experimentele implementatie is verwijderd vanaf de Microsoft MSVC (Visual C++) 14.51 toolset. Nieuwe code moet in plaats daarvan de C++17-klasse recursive_directory_iterator gebruiken.
Beschrijft een invoer-iterator die de bestandsnamen in een map doorloopt, mogelijk recursief aflopend in submappen. Voor een iterator Xretourneert de expressie *X een object van klasse directory_entry dat de bestandsnaam verpakt en alles wat bekend is over de status ervan.
Syntaxis
class recursive_directory_iterator;
Opmerkingen
De klassearchieven:
een object van het type
stack<pair<directory_iterator, path>>, hier genoemdmystackvoor de doeleinden van tentoonstelling, die het nest van mappen die moeten worden gesequentieeleen object van het type
directory_entrydat hier wordt aangeroepenmyentry, die de huidige bestandsnaam in de directoryreeks vertegenwoordigteen object van het type
bool, hier genoemdno_push, waarmee wordt vastgelegd of recursieve afstamming in submappen is uitgeschakeldeen object van het type
directory_options, hier genoemdmyoptions, waarin de opties worden vastgelegd die tijdens de bouw zijn vastgesteld
Een standaardgeconstrueerd object van het type recursive_directory_iterator heeft een iterator mystack.top().first voor het einde van de reeks en vertegenwoordigt het einde van de reeks-iterator. Bijvoorbeeld, op basis van de map abc met vermeldingen def (een map), def/ghien jklde code:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
aanroepen visit met de argumenten path("abc/def/ghi") en path("abc/jkl"). U kunt sequentiëren op twee manieren kwalificeren via een mapsubstructuur:
Een mapsymlink wordt alleen gescand als u een
recursive_directory_iteratorargumentdirectory_optionsmaakt waarvan de waarde isdirectory_options::follow_directory_symlink.Als u aanroept
disable_recursion_pending, wordt een volgende map die tijdens een increment is aangetroffen, niet recursief gescand.
Constructors
| Constructeur | Beschrijving |
|---|---|
| recursive_directory_iterator | Maakt een recursive_directory_iterator. |
Functies voor leden
| Lid, functie | Beschrijving |
|---|---|
| diepte | Retourneert mystack.size() - 1, dus pval is diepte nul. |
| disable_recursion_pending | Winkels true in no_push. |
| increment | Hiermee gaat u naar de volgende bestandsnaam in volgorde. |
| Opties | Retourneert myoptions. |
| pop | Hiermee verplaatst u de iterator naar het volgende item in de volgende diepte. |
| recursion_pending | Retourneert !no_push. |
Bedieners
| Operator | Beschrijving |
|---|---|
| operator!= | Retourneert !(*this == right). |
| operator= | De standaardoperators voor ledentoewijzing gedragen zich zoals verwacht. |
| operator== | Retourneert true alleen als beide *this en rechts end-of-sequence iterators zijn of beide geen end-of-sequence-iterators zijn. |
| operator* | Retourneert myentry. |
| operator-> | Retourneert &**this. |
| operator++ | Hiermee wordt de recursive_directory_iterator. |
Requirements
Rubriek:<experimental/filesystem>
Naamruimte:std::experimental::filesystem
recursive_directory_iterator::d epth
Retourneert mystack.size() - 1, dus pval is diepte nul.
int depth() const;
recursive_directory_iterator::d isable_recursion_pending
Winkels true in no_push.
void disable_recursion_pending();
recursive_directory_iterator::increment
Hiermee gaat u naar de volgende bestandsnaam in volgorde.
recursive_directory_iterator& increment(error_code& ec) noexcept;
Parameters
ec
Opgegeven foutcode.
Opmerkingen
De functie probeert naar de volgende bestandsnaam in de geneste reeks te gaan. Als dit lukt, wordt die bestandsnaam opgeslagen; myentryanders produceert het een iterator voor het einde van de reeks.
recursive_directory_iterator::operator!=
Retourneert !(*this == right).
bool operator!=(const recursive_directory_iterator& right) const;
Parameters
rechts
De recursive_directory_iterator ter vergelijking.
recursive_directory_iterator::operator=
De standaardoperators voor ledentoewijzing gedragen zich zoals verwacht.
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;
Parameters
recursive_directory_iterator
Het recursive_directory_iterator wordt gekopieerd naar de recursive_directory_iterator.
recursive_directory_iterator::operator==
Retourneert true alleen als beide *this en rechts end-of-sequence iterators zijn of beide geen end-of-sequence iterators zijn.
bool operator==(const recursive_directory_iterator& right) const;
Parameters
rechts
De recursive_directory_iterator ter vergelijking.
recursive_directory_iterator::operator*
Retourneert myentry.
const directory_entry& operator*() const;
recursive_directory_iterator::operator->
Retourneert &**this.
const directory_entry * operator->() const;
recursive_directory_iterator::operator++
Hiermee wordt de recursive_directory_iterator.
recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);
Parameters
int
Dummy-argument. Het is een C++-conventie die alleen wordt gebruikt om de operator voor incrementele voorvoegsels te onderscheiden van de operator voor incrementele voorvoegsels. Voor de C++-standaard moet het postfix-formulier een dummy int-parameter gebruiken.
Opmerkingen
De eerste lidfunctie roept increment()aan en retourneert *thisvervolgens . De tweede lidfunctie maakt een kopie van het object, roept aan increment()en retourneert vervolgens de kopie.
recursive_directory_iterator::options
Retourneert myoptions.
directory_options options() const;
recursive_directory_iterator::p op
Hiermee verplaatst u de iterator naar het volgende item in de volgende diepte.
void pop();
Opmerkingen
Als depth() == 0, het object wordt een end-of-sequence iterator. Anders beëindigt de lidfunctie het scannen van de huidige (diepste) map en wordt hervat op de volgende diepte.
recursive_directory_iterator::recursion_pending
Retourneert !no_push.
bool recursion_pending() const;
recursive_directory_iterator::recursive_directory_iterator
Maakt een 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
Het opgegeven pad.
error_code
De opgegeven foutcode.
opts
De opgegeven mapopties.
recursive_directory_iterator
Waarvan recursive_directory_iterator de constructie recursive_directory_iterator een kopie is.
Opmerkingen
De eerste constructor maakt een end-of-sequence iterator. De tweede constructor slaat false in no_push en meldt zich aanmyoptionsen probeert vervolgens pval te openen en te lezen als een map. Als dit lukt, wordt deze geïnitialiseerd mystack en myentry verwijst deze naar de eerste niet-mapnaam in de geneste reeks. Als dit mislukt, wordt er een end-of-sequence iterator gemaakt.
De derde en vierde constructors gedragen zich hetzelfde als de tweede, behalve dat ze fouten melden in ec in plaats van een uitzondering te genereren. De vierde constructor slaat directory_options::none in myoptions. De standaardconstructor gedraagt zich zoals verwacht.