# std::filesystem::recursive_directory_iterator::disable_recursion_pending

< cpp‎ | filesystem‎ | recursive directory iterator

void disable_recursion_pending(); |  | (C++17 起)

禁用到当前所指代的子目录的递归，若子目录存在。

该调用修改迭代器上的递归挂起标志，调用方法使得下次调用 `increment` 时，迭代器将在当前目录前进，即使未造访当前指代的子目录。

可以用 `recursion_pending()` 查询递归挂起标志的状态，此调用后它为 false 。 `increment` 后它被重置为 true ，其初值亦为 true 。

若 *this 是尾迭代器则行为未定义。

### 参数

（无）

### 异常

可能抛出实现定义的异常。

### 示例

    #include <cstdlib>
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <filesystem>
    namespace fs = std::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");
        std::system("tree sandbox");
        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';

            // 不下降到 "b"
            if(i->path().filename() == "b")
                i.disable_recursion_pending();
        }
        fs::remove_all("sandbox");
    }

可能的输出：

    sandbox
    ├── a
    │   └── b
    │       ├── c
    │       ├── d
    │       │   └── e
    │       └── file1.txt
    └── syma -> a

    "sandbox/a"
      "sandbox/a/b"
    "sandbox/syma" -> "a"

### 参阅

recursion_pending | 检查对当前目录是否禁用递归 (公开成员函数)
increment operator++ | 前移到下个目录条目 (公开成员函数)