Important
本文描述了來自 ISO C++ 檔案系統技術規範(N4100)預標準<experimental/filesystem>實作中的類別recursive_directory_iterator。 這個 API 與 C++17 recursive_directory_iterator 類別 <filesystem>不同。 它使用不同的簽章,包括 a noexceptincrement 和單一表單 pop 且無 error_code 過載。 該實驗性實作自 Microsoft Visual C++(MSVC)14.51 工具組起被移除。 新程式碼應該改用 C++17 recursive_directory_iterator 類別。
描述一個輸入迭代器,會序列序列目錄中的檔名,並可能遞迴地下降到子目錄。 對於迭代器 X,表達式 *X 會回傳一個類別物件 directory_entry ,包裹檔案名稱及其狀態的所有已知資訊。
語法
class recursive_directory_iterator;
註解
該班級可儲存:
一個類型
stack<pair<directory_iterator, path>>為 的物件,此處稱為mystack,用於說明,代表序列目錄的巢狀一個稱為
myentryhere 的物件directory_entry,代表目錄序列中目前的檔名一個類型為
bool的物件,稱為no_push此處,記錄遞迴下降至子目錄是否被禁用一個型為
directory_options的物件,稱為myoptions此處,記錄在建構時所建立的選項
預設構造的物件類型為 , recursive_directory_iterator 其在 有一個 mystack.top().first 序列結束迭代器,代表序列結束迭代器。 例如,給定包含元素def(一個目錄)、def/ghi、 jkl和 的目錄abc,程式碼:
for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
visit(next->path());
呼叫 visit 參數為 path("abc/def/ghi")path("abc/jkl")和 。 你可以用兩種方式來限定目錄子樹的排序:
只有當你構造
recursive_directory_iterator一個參數directory_options值為directory_options::follow_directory_symlink時,目錄符號連結才會被掃描。如果你呼叫
disable_recursion_pending,在遞增過程中遇到的後續目錄不會被遞迴掃描。
建構函數
| 建構函式 | 說明 |
|---|---|
| recursive_directory_iterator | 建構一個 recursive_directory_iterator。 |
成員函式
| 成員函數 | 說明 |
|---|---|
| 深度 | 返回 mystack.size() - 1,因此 pval 在深度為零。 |
| disable_recursion_pending |
true商店位於 no_push。 |
| increment | 會跳到下一個檔案名稱。 |
| 選項 | 傳回 myoptions。 |
| 砰 | 將迭代器移至下一個較低深度的下一個項目。 |
| recursion_pending | 傳回 !no_push。 |
Operators
| Operator | 說明 |
|---|---|
| operator!= | 傳回 !(*this == right)。 |
| operator= | 預設的成員指派運算子會如預期般運作。 |
| operator== | 只有當 *this和 都不是序列結束迭代器,或兩者都不是序列結束迭代子時,才會回傳true。 |
| 運算子* | 傳回 myentry。 |
| 運算子-> | 傳回 &**this。 |
| operator++ | 增 recursive_directory_iterator量 。 |
Requirements
標頭:<experimental/filesystem>
命名空間:std::experimental::filesystem
recursive_directory_iterator::d epth
返回 mystack.size() - 1,因此 pval 在深度為零。
int depth() const;
recursive_directory_iterator::d isable_recursion_pending
true商店位於 no_push。
void disable_recursion_pending();
recursive_directory_iterator::增量
會跳到下一個檔案名稱。
recursive_directory_iterator& increment(error_code& ec) noexcept;
參數
ec
指定錯誤代碼。
註解
函式嘗試推進巢狀序列中的下一個檔名。 若成功,則將該檔名儲存在 myentry;否則會產生序列結束迭代器。
recursive_directory_iterator::運算子!=
傳回 !(*this == right)。
bool operator!=(const recursive_directory_iterator& right) const;
參數
右
這是 recursive_directory_iterator 個比較。
recursive_directory_iterator::operator=
預設的成員指派運算子會如預期般運作。
recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;
參數
recursive_directory_iterator
這個recursive_directory_iterator存在被複製進了recursive_directory_iterator
recursive_directory_iterator::操作員==
只有當 *this 和 右都是序列結束迭代子,或兩者都不是序列結束迭代子時,才會回傳true。
bool operator==(const recursive_directory_iterator& right) const;
參數
右
這是 recursive_directory_iterator 個比較。
recursive_directory_iterator::運算子*
傳回 myentry。
const directory_entry& operator*() const;
recursive_directory_iterator::operator->
傳回 &**this。
const directory_entry * operator->() const;
recursive_directory_iterator::operator++
增 recursive_directory_iterator量 。
recursive_directory_iterator& operator++();
recursive_directory_iterator operator++(int);
參數
int
愚蠢的爭論。 這是 C++ 的慣例,僅用來區分後綴的增量運算子與前綴的增量運算子。 C++ 標準要求後綴形式必須使用虛擬的整數參數。
註解
第一個成員函數呼叫 increment(),然後返回 *this。 第二個成員函式會複製物件,呼叫 increment(),然後回傳該複製。
recursive_directory_iterator::options
傳回 myoptions。
directory_options options() const;
recursive_directory_iterator::p op
將迭代器移至下一個較低深度的下一個項目。
void pop();
註解
若 depth() == 0,則物件成為序列末端迭代器。 否則,成員函式會終止對目前(最深)目錄的掃描,並從下一個較低的深度繼續。
recursive_directory_iterator::recursion_pending
傳回 !no_push。
bool recursion_pending() const;
recursive_directory_iterator::recursive_directory_iterator
建構一個 recursive_directory_iterator。
recursive_directory_iterator() noexcept;
explicit recursive_directory_iterator(const path& pval,
directory_options opts = directory_options::none);
recursive_directory_iterator(const path& pval,
directory_options opts,
error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) = default;
參數
pval
指定的路徑。
error_code
指定的錯誤代碼。
OPTS
指定的目錄選項。
recursive_directory_iterator
而 的 recursive_directory_iteratorrecursive_directory_iterator 構造物是複製品。
註解
第一個建構子建立一個序列結束迭代器。 第二個建構子儲存false並no_push選擇 ,myoptions然後嘗試以目錄形式開啟並讀取 pval。 若成功,則初始化 mystack 並 myentry 指向巢狀序列中第一個非目錄的檔名。 若失敗,則會產生序列結束迭代器。
第三和第四個構造子的行為與第二個相同,只是它們會報告 ec 錯誤,而非拋出例外。 第四個構造子儲存 directory_options::none 在 myoptions。 預設建構子的行為如預期般運作。