Namensräume
Varianten
Aktionen

std::experimental::filesystem::recursive_directory_iterator::disable_recursion_pending

Von cppreference.com
 
 
 
 
 
void disable_recursion_pending();
(Dateisystem-TS)

Deaktiviert die Rekursion in das aktuell referenzierte Unterverzeichnis, falls vorhanden.

Der Aufruf modifiziert das "pending recursion"-Flag des Iterators so, dass beim nächsten Aufruf von increment der Iterator innerhalb des aktuellen Verzeichnisses vorrückt, auch wenn er derzeit auf ein noch nicht besuchtes Unterverzeichnis verweist.

Der Status des "pending recursion"-Flags kann mit recursion_pending() abgefragt werden, welcher nach diesem Aufruf false ist. Er wird nach einem 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 <experimental/filesystem>
#include <fstream>
#include <iostream>
#include <string>
namespace fs = std::experimental::filesystem;
 
int main()
{
    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");
    for (auto i = fs::recursive_directory_iterator("sandbox");
             i != fs::recursive_directory_iterator(); ++i)
    {
        std::cout << std::string(i.depth(), ' ') << *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");
}

Ausgabe

"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]