<experimental/filesystem> recursive_directory_iterator 類別

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;

註解

該班級可儲存:

  1. 一個類型 stack<pair<directory_iterator, path>>為 的物件,此處稱為 mystack ,用於說明,代表序列目錄的巢狀

  2. 一個稱為 myentry here 的物件directory_entry,代表目錄序列中目前的檔名

  3. 一個類型為 bool的物件,稱為 no_push 此處,記錄遞迴下降至子目錄是否被禁用

  4. 一個型為 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")和 。 你可以用兩種方式來限定目錄子樹的排序:

  1. 只有當你構造 recursive_directory_iterator 一個參數 directory_options 值為 directory_options::follow_directory_symlink時,目錄符號連結才會被掃描。

  2. 如果你呼叫 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。 預設建構子的行為如預期般運作。

參見

<experimental/filesystem>
directory_entry 類別