Namespaces
Variants

std::filesystem::recursive_directory_iterator:: disable_recursion_pending

From cppreference.net
void disable_recursion_pending ( ) ;
(seit C++17)

Deaktiviert die Rekursion zum aktuell referenzierten Unterverzeichnis, falls vorhanden.

Der Aufruf modifiziert das ausstehende Rekursionsflag des Iterators auf solche Weise, dass beim nächsten Aufruf von increment der Iterator innerhalb des aktuellen Verzeichnisses voranschreitet, selbst wenn er derzeit auf ein Unterverzeichnis verweist, das noch nicht besucht wurde.

Der Status des ausstehenden Rekursionsflags kann mit recursion_pending() abgefragt werden, welcher false nach diesem Aufruf ist. Es wird zurückgesetzt auf true nach increment , und sein Anfangswert ist ebenfalls true .

Das Verhalten ist undefiniert, wenn * this der End-Iterator ist.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

(keine)

Ausnahmen

Kann implementierungsdefinierte Ausnahmen auslösen.

Beispiel

#include <cstdlib>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <string>
namespace fs = std::filesystem;
int main()
{
    fs::current_path(fs::temp_directory_path());
    fs::create_directories("sandbox/a/b/c");
    fs::create_directories("sandbox/a/b/d/e");
    std::ofstream("sandbox/a/b/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    std::system("tree sandbox");
    for (auto i = fs::recursive_directory_iterator("sandbox");
         i != fs::recursive_directory_iterator();
         ++i)
    {
        std::cout << std::string(i.depth() * 2, ' ') << *i;
        if (fs::is_symlink(i->symlink_status()))
            std::cout << " -> " << fs::read_symlink(*i);
        std::cout << '\n';
        // nicht in "b" absteigen
        if (i->path().filename() == "b")
            i.disable_recursion_pending();
    }
    fs::remove_all("sandbox");
}

Mögliche Ausgabe:

sandbox
├── a
│   └── b
│       ├── c
│       ├── d
│       │   └── e
│       └── file1.txt
└── syma -> a
"sandbox/a"
  "sandbox/a/b"
"sandbox/syma" -> "a"

Siehe auch

prüft, ob die Rekursion für das aktuelle Verzeichnis deaktiviert ist
(öffentliche Elementfunktion)
wechselt zum nächsten Eintrag
(öffentliche Elementfunktion)