名稱空間
變體
操作

std::experimental::filesystem::recursive_directory_iterator

來自 cppreference.com
< cpp‎ | experimental‎ | fs
 
 
實驗性
技術規範
檔案系統庫 (檔案系統 TS)
庫基礎 (庫基礎 TS)
庫基礎 2 (庫基礎 TS v2)
庫基礎 3 (庫基礎 TS v3)
並行性擴充套件 (並行性 TS)
並行性擴充套件 2 (並行性 TS v2)
併發性擴充套件 (併發性 TS)
併發擴充套件 2 (concurrency TS v2)
概念 (概念 TS)
範圍 (範圍 TS)
反射 (反射 TS)
數學特殊函式 (特殊函式 TR)
實驗性非 TS
模式匹配
線性代數
std::execution
契約
2D 圖形
 
 
 
定義於標頭檔案 <experimental/filesystem>
class recursive_directory_iterator;
(filesystem TS)

recursive_directory_iterator 是一個 LegacyInputIterator,它迭代目錄的 directory_entry 元素,並遞迴迭代所有子目錄的條目。迭代順序未指定,除了每個目錄條目只訪問一次。

預設情況下,不跟隨符號連結,但這可以透過在構造時指定目錄選項 follow_directory_symlink 來啟用。

特殊路徑名 dotdot-dot 會被跳過。

如果 recursive_directory_iterator 超越頂層目錄的最後一個目錄條目,它將變得與預設構造的迭代器(也稱為結束迭代器)相等。兩個結束迭代器總是相等,解引用或遞增結束迭代器是未定義行為。

如果在建立遞迴目錄迭代器後,檔案或目錄被刪除或新增到目錄樹中,則透過迭代器是否觀察到此更改是未指定的。

如果目錄結構包含迴圈,則可能無法到達結束迭代器。

目錄

[編輯] 成員型別

成員型別 定義
value_type filesystem::directory_entry
difference_type std::ptrdiff_t
pointer const filesystem::directory_entry*
reference const filesystem::directory_entry&
iterator_category std::input_iterator_tag

[編輯] 成員函式

構造一個遞迴目錄迭代器
(public member function) [編輯]
(解構函式)
預設解構函式
(public member function) [編輯]
觀察器
訪問指向的條目
(public member function) [編輯]
返回當前活躍的影響迭代的選項
(public member function) [編輯]
返回當前遞迴深度
(public member function) [編輯]
檢查當前目錄是否停用遞迴
(public member function) [編輯]
修改器
賦值內容
(public member function) [編輯]
前進到下一個條目
(public member function) [編輯]
在目錄層次結構中將迭代器向上移動一級
(public member function) [編輯]
停用遞迴直到下一次遞增
(public member function) [編輯]

[編輯] 非成員函式

支援基於範圍的 for 迴圈
(function) [編輯]

此外,根據 LegacyInputIterator 的要求,提供了 operator==operator!=,作為成員函式或非成員函式。

[編輯] 注意

recursive_directory_iterator 通常持有一個引用計數的指標(以滿足 LegacyInputIterator 的淺複製語義)到一個實現物件,該物件持有

[編輯] 示例

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::filesystem;
 
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for (const fs::directory_entry& entry : fs::recursive_directory_iterator("sandbox"))
        std::cout << entry << '\n';
    fs::remove_all("sandbox");
}

可能的輸出

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

[編輯] 另請參見

指向目錄內容的迭代器
(class) [編輯]
目錄項
(class) [編輯]
迭代目錄內容的選項
(enum) [編輯]