std::experimental::filesystem::recursive_directory_iterator
來自 cppreference.com
< cpp | experimental | fs
定義於標頭檔案 <experimental/filesystem> |
||
class recursive_directory_iterator; |
(filesystem TS) | |
recursive_directory_iterator
是一個 LegacyInputIterator,它迭代目錄的 directory_entry 元素,並遞迴迭代所有子目錄的條目。迭代順序未指定,除了每個目錄條目只訪問一次。
預設情況下,不跟隨符號連結,但這可以透過在構造時指定目錄選項 follow_directory_symlink 來啟用。
特殊路徑名 dot 和 dot-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 的淺複製語義)到一個實現物件,該物件持有
- 一個非遞迴 directory_iterators 的容器(例如 std::vector),它構成了遞迴棧。
- 遞迴深度計數器(可透過 depth() 訪問)。
- 構造時使用的目錄選項(可透過 options() 訪問)。
- 待定遞迴標誌(可透過 recursion_pending() 訪問,可與目錄選項結合以節省空間)。
[編輯] 示例
執行此程式碼
#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) |