filesystem

Sertakan header <filesystem> untuk akses ke kelas dan fungsi yang memanipulasi dan mengambil informasi tentang jalur, file, dan direktori.

Sintaks

#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;

Penting

Pada rilis Visual Studio 2017, <filesystem> header belum menjadi standar C++. C++ di Visual Studio 2017 RTW mengimplementasikan standar draf akhir, yang ditemukan dalam ISO/IEC JTC 1/SC 22/WG 21 N4100. Visual Studio 2017 versi 15.7 dan yang lebih baru mendukung standar C++17 <filesystem> baru. Ini adalah implementasi yang sama sekali baru, tidak kompatibel dengan versi sebelumnya std::experimental . Hal ini diperlukan oleh dukungan symlink, perbaikan bug, dan perubahan perilaku yang diperlukan standar. Di Visual Studio 2019 versi 16.3 dan yang lebih baru, termasuk <filesystem> hanya menyediakan yang baru std::filesystem. Termasuk <experimental/filesystem> hanya menyediakan implementasi lama experimental . Implementasi experimental akan dihapus dalam rilis pustaka pemecah ABI berikutnya.

Header ini mendukung sistem file untuk salah satu dari dua kelas luas sistem operasi host: Microsoft Windows dan POSIX.

Meskipun sebagian besar fungsionalitas umum untuk kedua sistem operasi, dokumen ini mengidentifikasi di mana perbedaan terjadi. Contohnya:

  • Windows mendukung beberapa nama akar, seperti c: atau \\network_name. Sistem file terdiri dari hutan pohon, masing-masing dengan direktori akarnya sendiri, seperti c:\ atau \\network_name\, dan masing-masing dengan direktorinya sendiri saat ini, untuk menyelesaikan nama jalur relatif (yang bukan nama jalur absolut).

  • POSIX mendukung satu pohon, tanpa nama akar, direktori /akar tunggal , dan satu direktori saat ini.

Perbedaan signifikan lainnya adalah representasi asli dari nama jalur:

  • Windows menggunakan urutan null-terminated dari wchar_t, dikodekan sebagai UTF-16 (satu atau beberapa elemen untuk setiap character).

  • POSIX menggunakan urutan null-terminated dari char, dikodekan sebagai UTF-8 (satu atau beberapa elemen untuk setiap character).

  • Objek kelas path menyimpan nama jalur dalam bentuk asli, tetapi mendukung konversi mudah antara formulir tersimpan ini dan beberapa bentuk eksternal:

    • Urutan null-terminated dari char, dikodekan seperti yang disukai oleh sistem operasi.

    • Urutan null-terminated dari char, dikodekan sebagai UTF-8.

    • Urutan null-terminated dari wchar_t, dikodekan seperti yang disukai oleh sistem operasi.

    • Urutan null-terminated dari char16_t, dikodekan sebagai UTF-16.

    • Urutan null-terminated dari char32_t, dikodekan sebagai UTF-32.

    Interkonversi antara representasi ini dimediasi, sesuai kebutuhan, dengan menggunakan satu atau beberapa codecvt faset. Jika tidak ada objek lokal tertentu yang ditentukan, faset ini diperoleh dari lokal global.

Perbedaan lain adalah detail di mana setiap sistem operasi memungkinkan Anda menentukan izin akses file atau direktori:

  • Windows merekam apakah file bersifat baca-saja atau bisa-tulis, atribut yang tidak memiliki arti untuk direktori.

  • POSIX mencatat apakah file dapat dibaca, ditulis, atau dijalankan (dipindai, jika direktori). Dan, apakah setiap operasi diizinkan untuk pemilik, grup pemilik, atau untuk semua orang, ditambah beberapa izin lainnya.

Umum untuk kedua sistem adalah struktur yang diberlakukan pada nama jalur setelah Anda melewati nama akar. Untuk nama c:/abc/xyz/def.extjalur :

  • Nama akarnya adalah c:.

  • Direktori akar adalah /.

  • Jalur akarnya adalah c:/.

  • Jalur relatif adalah abc/xyz/def.ext.

  • Jalur induknya adalah c:/abc/xyz.

  • Nama file adalah def.ext.

  • Batangnya adalah def.

  • Ekstensinya adalah .ext.

Perbedaan kecil adalah pemisah pilihan antara urutan direktori dalam nama jalur. Kedua sistem operasi memungkinkan Anda menulis garis miring /ke depan , tetapi dalam beberapa konteks Windows lebih suka garis miring terbelakang \. Implementasi menyimpan pemisah pilihannya dalam anggota preferred_separator data di path.

Terakhir, path objek memiliki fitur penting: Anda dapat menggunakannya di mana pun argumen nama file diperlukan dalam kelas yang ditentukan di header <fstream>.

Untuk informasi selengkapnya dan contoh kode, lihat Navigasi sistem file (C++).

Anggota

Kelas

Nama Deskripsi
directory_entry class Menjelaskan objek yang dikembalikan oleh directory_iterator atau recursive_directory_iterator dan berisi path.
directory_iterator class Menjelaskan iterator input yang mengurutkan melalui nama file dalam direktori sistem file.
filesystem_error class Kelas dasar untuk pengecualian yang dilemparkan untuk melaporkan luapan sistem tingkat rendah.
path class Menentukan kelas yang menyimpan objek jenis String templat yang cocok untuk digunakan sebagai nama file.
recursive_directory_iterator class Menjelaskan iterator input yang mengurutkan melalui nama file dalam direktori sistem file. Iterator juga dapat turun ke subdirektori.
file_status class Membungkus file_type.

Struct

Nama Deskripsi
space_info struktur Menyimpan informasi tentang volume.

Fungsi

<filesystem> Fungsi

Operators

<filesystem> Operator

Enumerasi

Nama Deskripsi
copy_options Enumerasi yang digunakan dengan copy_file dan menentukan perilaku jika file tujuan sudah ada.
directory_options Enumerasi yang menentukan opsi untuk iterator direktori.
file_type Enumerasi untuk jenis file.
perm_options Menghitung opsi untuk fungsi.permissions
perms Jenis bitmask yang digunakan untuk menyampaikan izin dan opsi untuk izin

Baca juga

Referensi file header