命名空间
变体
操作

std::filesystem::recursive_directory_iterator::depth

来自 cppreference.com
 
 
 
 
int depth() const;
(自 C++17)

返回从起始目录到当前迭代目录的目录数,即当前目录层次结构的深度。

起始目录的深度为 0,其子目录的深度为 1,依此类推。

如果 *this 是末尾迭代器,则行为未定义。

内容

[编辑] 参数

(无)

[编辑] 返回值

当前目录层次结构的深度。

[编辑] 异常

不抛出任何异常。

[编辑] 示例

此示例使用迭代深度来计算目录树打印输出的缩进。

#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");
}

输出

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