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
Führen Sie diesen Code aus
#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) | |
| bewegt sich zum nächsten Eintrag (public member function) |