recursive_directory_iterator-klasse

Beschrijft een invoer-iterator die de bestandsnamen in een map doorloopt, mogelijk recursief aflopend in submappen. Voor een iterator Xevalueert de expressie *X naar een object van klasse directory_entry dat de bestandsnaam verpakt en alles wat bekend is over de status ervan.

Zie Bestandssysteemnavigatie (C++) voor meer informatie en codevoorbeelden.

Syntaxis

class recursive_directory_iterator;

Opmerkingen

In de klassesjabloon wordt het volgende opgeslagen:

  1. een object van het type stack<pair<directory_iterator, path>>, hier genoemd mystack voor de doeleinden van tentoonstelling, die het nest van mappen vertegenwoordigt dat moet worden gesequentieerd

  2. een object van het type directory_entry dat hier wordt aangeroepen myentry , die de huidige bestandsnaam in de directoryreeks vertegenwoordigt

  3. een object van het type bool, hier genoemd no_push , waarmee wordt vastgelegd of recursieve afstamming in submappen is uitgeschakeld

  4. een object van het type directory_options, hier genoemd myoptions , 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());

zal een bezoek aanroepen met de argumenten path("abc/def/ghi") en path("abc/jkl"). U kunt sequentiëren op twee manieren kwalificeren via een mapsubstructuur:

  1. Een mapsymlink wordt alleen gescand als u een recursive_directory_iteratordirectory_options argument maakt waarvan de waarde is directory_options::follow_directory_symlink.

  2. 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:<filesystem>

Naamruimte:std::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);

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

Parameters

recursive_directory_iterator
De recursive_directory_iterator worden 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();
void pop(error_code& ec);

Parameters

ec
De foutcode waarmee de status van de bewerking wordt gerapporteerd. De overbelasting die een ec-argument gebruikt, rapporteert fouten in ec in plaats van een uitzondering te genereren.

Opmerkingen

Als depth() == 0 het object een end-of-sequence iterator wordt. 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);

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
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 produceert een iterator voor het einde van de reeks. De tweede en derde constructors slaan false in no_push en directory_options::none in myoptionsen proberen vervolgens pval te openen en te lezen als map. Als dit lukt, initialiseren mystack ze en myentry wijzen ze de eerste niet-mapbestandsnaam in de geneste reeks aan; anders produceren ze een iterator voor de end-of-sequence.

De vierde en vijfde constructors gedragen zich hetzelfde als de tweede en derde, behalve dat ze zich voor het eerst opslaan aanmeldenmyoptions. De standaardconstructor gedraagt zich zoals verwacht.

Zie ook

headerbestanden
<bestandssysteem>
Bestandssysteemnavigatie (C++)