Namensräume
Varianten
Aktionen

std::filesystem::recursive_directory_iterator::depth

Von cppreference.com
 
 
 
 
int depth() const;
(seit C++17)

Gibt die Anzahl der Verzeichnisse vom Startverzeichnis bis zum aktuell durchlaufenen Verzeichnis zurück, d. h. die aktuelle Tiefe der Verzeichnishierarchie.

Das Startverzeichnis hat die Tiefe 0, seine Unterverzeichnisse haben die Tiefe 1 usw.

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

Inhalt

[bearbeiten] Parameter

(keine)

[bearbeiten] Rückgabewert

Aktuelle Tiefe der Verzeichnishierarchie.

[bearbeiten] Ausnahmen

Wirft nichts.

[bearbeiten] Beispiel

Dieses Beispiel verwendet die Iterationstiefe, um die Einrückung der Ausgabe eines Verzeichnisbaums zu berechnen.

#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");
    for (auto i = fs::recursive_directory_iterator("sandbox");
         i != fs::recursive_directory_iterator();
         ++i)
    {
        std::cout << std::string(i.depth() << 1, ' ') << *i;
        if (fs::is_symlink(i->symlink_status()))
            std::cout << " -> " << fs::read_symlink(*i);
        std::cout << '\n';
    }
    fs::remove_all("sandbox");
}

Ausgabe

"sandbox/syma" -> "a"
"sandbox/a"
  "sandbox/a/b"
    "sandbox/a/b/d"
      "sandbox/a/b/d/e"
    "sandbox/a/b/file1.txt"
    "sandbox/a/b/c"