Bagikan melalui


Kelas recursive_directory_iterator

Menjelaskan iterator input yang mengurutkan melalui nama file dalam direktori, mungkin turun ke subdirektori secara rekursif. Untuk iterator X, ekspresi *X mengevaluasi ke objek kelas directory_entry yang membungkus nama file dan apa pun yang diketahui tentang statusnya.

Untuk informasi selengkapnya dan contoh kode, lihat Navigasi Sistem File (C++).

Sintaks

class recursive_directory_iterator;

Keterangan

Templat kelas menyimpan:

  1. objek jenis stack<pair<directory_iterator, path>>, dipanggil mystack di sini untuk tujuan eksposisi, yang mewakili sarang direktori yang akan diurutkan

  2. objek jenis directory_entry yang disebut myentry di sini, yang mewakili nama file saat ini dalam urutan direktori

  3. objek jenis bool, dipanggil no_push di sini, yang merekam apakah turun rekursif ke subdirektori dinonaktifkan

  4. objek jenis directory_options, yang disebut myoptions di sini, yang mencatat opsi yang ditetapkan saat konstruksi

Objek jenis recursive_directory_entry yang dibangun default memiliki iterator akhir urutan pada mystack.top().first dan mewakili iterator akhir urutan. Misalnya, mengingat direktori abc dengan entri def (direktori), def/ghi, dan jkl, kode:

for (recursive_directory_iterator next(path("abc")), end; next != end; ++next)
    visit(next->path());

akan memanggil kunjungi dengan argumen path("abc/def/ghi") dan path("abc/jkl"). Anda dapat memenuhi syarat pengurutan melalui subtree direktori dengan dua cara:

  1. Symlink direktori akan dipindai hanya jika Anda membuat recursive_directory_iterator dengan argumen yang directory_options nilainya adalah directory_options::follow_directory_symlink.

  2. Jika Anda memanggil disable_recursion_pending, direktori berikutnya yang ditemui selama kenaikan tidak akan dipindai secara rekursif.

Konstruktor

Konstruktor Deskripsi
recursive_directory_iterator Membangun sebuah recursive_directory_iterator.

Fungsi anggota

Fungsi anggota Deskripsi
Kedalaman mystack.size() - 1Mengembalikan , demikian juga pval pada kedalaman nol.
disable_recursion_pending true Menyimpan di no_push.
Kenaikan Maju ke nama file berikutnya secara berurutan.
opsi Menampilkan myoptions.
Pop Mengembalikan objek berikutnya.
recursion_pending Menampilkan !no_push.

Operators

Operator Deskripsi
operator!= Menampilkan !(*this == right).
operator= Operator penetapan anggota default berulah seperti yang diharapkan.
operator== true Mengembalikan hanya jika keduanya *this dan kanan adalah iterator akhir urutan atau keduanya bukan end-of-sequence-iterators.
Operator* Menampilkan myentry.
Operator-> Menampilkan &**this.
operator++ Menaikkan recursive_directory_iterator.

Persyaratan

Header:<filesystem>

Namespace: std::tr2::sys

recursive_directory_iterator::d epth

mystack.size() - 1Mengembalikan , demikian juga pval pada kedalaman nol.

int depth() const;

recursive_directory_iterator::d isable_recursion_pending

true Menyimpan di no_push.

void disable_recursion_pending();

recursive_directory_iterator::kenaikan

Maju ke nama file berikutnya secara berurutan.

recursive_directory_iterator& increment(error_code& ec) noexcept;

Parameter

Ec
Kode kesalahan yang ditentukan.

Keterangan

Fungsi ini mencoba untuk maju ke nama file berikutnya dalam urutan berlapis. Jika berhasil, ia menyimpan nama file tersebut di myentry; jika tidak, ia menghasilkan iterator akhir urutan.

recursive_directory_iterator::operator!=

Menampilkan !(*this == right).

bool operator!=(const recursive_directory_iterator& right) const;

Parameter

right
Recursive_directory_iterator untuk perbandingan.

recursive_directory_iterator::operator=

Operator penetapan anggota default berulah seperti yang diharapkan.

recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;
recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept = default;

Parameter

recursive_directory_iterator
recursive_directory_iterator sedang disalin ke recursive_directory_iteratordalam .

recursive_directory_iterator::operator==

true Mengembalikan hanya jika keduanya *this dan kanan adalah iterator akhir urutan atau keduanya bukan end-of-sequence-iterators.

bool operator==(const recursive_directory_iterator& right) const;

Parameter

right
Recursive_directory_iterator untuk perbandingan.

recursive_directory_iterator::operator*

Menampilkan myentry.

const directory_entry& operator*() const;

recursive_directory_iterator::operator->

Menampilkan &**this.

const directory_entry * operator->() const;

recursive_directory_iterator::operator++

Menaikkan recursive_directory_iterator.

recursive_directory_iterator& operator++();

recursive_directory_iterator& operator++(int);

Parameter

int
Kenaikan yang ditentukan.

Keterangan

Fungsi anggota pertama memanggil increment(), lalu mengembalikan *this. Fungsi anggota kedua membuat salinan objek, memanggil increment(), lalu mengembalikan salinan.

recursive_directory_iterator::options

Menampilkan myoptions.

directory_options options() const;

recursive_directory_iterator::p op

Mengembalikan objek berikutnya.

void pop();

Keterangan

Jika depth() == 0 objek menjadi iterator akhir urutan. Jika tidak, fungsi anggota mengakhiri pemindaian direktori saat ini (terdalam) dan melanjutkan pada kedalaman bawah berikutnya.

recursive_directory_iterator::recursion_pending

Menampilkan !no_push.

bool recursion_pending() const;

recursive_directory_iterator::recursive_directory_iterator

Membangun sebuah recursive_directory_iterator.

recursive_directory_iterator() noexcept;
explicit recursive_directory_iterator(const path& pval);

recursive_directory_iterator(const path& pval,
    error_code& ec) noexcept;
recursive_directory_iterator(const path& pval,
    directory_options opts);

recursive_directory_iterator(const path& pval,
    directory_options opts,
    error_code& ec) noexcept;
recursive_directory_iterator(const recursive_directory_iterator&) = default;
recursive_directory_iterator(recursive_directory_iterator&&) noexcept = default;

Parameter

pval
Jalur yang ditentukan.

error_code
Kode kesalahan yang ditentukan.

Memilih
Opsi direktori yang ditentukan.

recursive_directory_iterator
Yang recursive_directory_iterator dibangun recursive_directory_iterator adalah salinan.

Keterangan

Konstruktor pertama menghasilkan iterator akhir urutan. Konstruktor kedua dan ketiga menyimpan false dalam no_push dan directory_options::none di myoptions, lalu mencoba membuka dan membaca pval sebagai direktori. Jika berhasil, mereka menginisialisasi mystack dan myentry untuk menunjuk nama file non-direktori pertama dalam urutan berlapis; jika tidak, mereka menghasilkan iterator akhir urutan.

Konstruktor keempat dan kelima berperilaku sama dengan yang kedua dan ketiga, kecuali bahwa mereka pertama kali menyimpan ikut serta dalam myoptions. Konstruktor default berperilaku seperti yang diharapkan.

Baca juga

Referensi File Header
<Filesystem>
Navigasi Sistem File (C++)