# std::filesystem::begin(recursive_directory_iterator), std::filesystem::end(recursive_directory_iterator)

< cpp‎ | filesystem‎ | recursive directory iterator

定义于头文件 `<filesystem>` |  |
recursive_directory_iterator begin( recursive_directory_iterator iter ) noexcept; | (1) | (C++17 起)
recursive_directory_iterator end( recursive_directory_iterator ) noexcept; | (2) | (C++17 起)

1) 返回不更改的 `iter` 。
2) 返回默认构造的 `recursive_directory_iterator` ，其作用为尾迭代器。忽略参数。

非成员函数使得以基于范围的 for 循环使用 `recursive_directory_iterator` 可行并使 `recursive_directory_iterator` 为 `range` 类型 (C++20 起)。

### 参数

iter | - | `recursive_directory_iterator`

### 返回值

1) 不更改的 `iter` 。
2) 尾迭代器（默认构造的 `recursive_directory_iterator` ）。

### 示例

    #include <cstdlib>
    #include <filesystem>
    #include <fstream>
    #include <iostream>
    namespace fs = std::filesystem;

    int main()
    {
        fs::current_path(fs::temp_directory_path());
        fs::create_directories("sandbox/a/b");
        std::ofstream("sandbox/file1.txt");
        fs::create_symlink("a", "sandbox/syma");

        std::cout << "Print dir structure using OS specific command 'tree':\n";
        std::system("tree --noreport sandbox");

        std::cout << "\nPrint dir structure using directory iterator:\n";
        for(auto& p: fs::recursive_directory_iterator("sandbox"))
            std::cout << p << '\n';

        fs::remove_all("sandbox");
    }

可能的输出：

    Print dir structure using OS specific command 'tree':
    sandbox
    ├── a
    │   └── b
    ├── file1.txt
    └── syma -> a

    Print dir structure using directory iterator:
    "sandbox/syma"
    "sandbox/file1.txt"
    "sandbox/a"
    "sandbox/a/b"

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3480 | C++17 | `end` 按引用接收参数 | 按值接收参数

### 参阅

begin(std::filesystem::directory_iterator)end(std::filesystem::directory_iterator) | 基于范围的 for 循环支持 (函数)