Namensräume
Varianten
Aktionen

std::filesystem::recursive_directory_iterator::disable_recursion_pending

Von cppreference.com
 
 
 
 
void disable_recursion_pending();
(seit C++17)

Deaktiviert die Rekursion zum aktuell referenzierten Unterverzeichnis, falls vorhanden.

Der Aufruf modifiziert das schwebende Rekursions-Flag des Iterators so, dass beim nächsten Aufruf von increment der Iterator innerhalb des aktuellen Verzeichnisses weiterschaltet, auch wenn er gerade auf ein noch nicht besuchtes Unterverzeichnis verweist.

Der Status des schwebenden Rekursions-Flags kann mit recursion_pending() abgefragt werden, was nach diesem Aufruf false ist. Es wird nach increment wieder auf true zurückgesetzt, und sein Anfangswert ist ebenfalls true.

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

Inhalt

[edit] Parameter

(keine)

[edit] Rückgabewert

(keine)

[edit] Exceptions

Kann implementierungsdefinierte Ausnahmen auslösen.

[edit] 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';
 
        // do not descend into "b"
        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"

[edit] Siehe auch

prüft, ob die Rekursion für das aktuelle Verzeichnis deaktiviert ist
(public member function) [edit]
bewegt sich zum nächsten Eintrag
(public member function) [edit]