Proyek ini membangun alat yang akrab dengan pekerjaan sehari-hari di terminal: pengelola file berbasis baris perintah yang memindai folder, menyaring berkas berdasarkan ekstensi, nama, dan ukuran, lalu melaporkan metadata berupa ukuran dan permission dalam tabel yang rapi. Seluruh kemampuan itu berdiri di atas satu pustaka standar, std::filesystem — kumpulan class dan function untuk berinteraksi dengan sistem berkas secara portabel, tanpa perintah shell dan tanpa pustaka pihak ketiga. Selain hasil akhirnya yang langsung berguna, proyek ini juga adalah tur yang paling lengkap atas pustaka tersebut: iterator folder, path, perms, sampai last_write_time semua terpakai di tempat yang masuk akal.
Ada dua keputusan desain yang kita pegang dari baris pertama. Pertama, program membuat folder contohnya sendiri bila belum ada — folder contoh yang idempoten, dengan permission yang ditetapkan eksplisit — sehingga output program identik di mesin mana pun dan layak dijadikan output terverifikasi. Kedua, setiap operasi filesystem memakai versi error_code: kegagalan masuk sebagai nilai yang diperiksa, bukan exception yang terlempar tanpa terduga, dan setiap kegagalan berakhir dengan pesan jelas plus exit code 1. Kedua keputusan ini yang membuat program bisa dikunci perilakunya oleh harness pengujian di bagian akhir.
Kita membangunnya dalam empat bagian:
- Bagian 1: Menjelajahi Direktori — menyiapkan folder contoh secara terprogram dan menampilkan isinya dengan
directory_iterator. - Bagian 2: Mencari dan Memfilter File — filter ekstensi, kata kunci nama, dan ukuran minimum lewat opsi baris perintah.
- Bagian 3: Membaca Metadata File — ukuran, permission dalam notasi ringkas, dan waktu ubah beserta aturannya sebagai data uji.
- Bagian 4: Menangani Error File — perisai galat menyeluruh di
main(), program final, dan harness 22 cek yang mengunci seluruh perilaku.
Berkas program final selalu tersedia di src/pengelola-file.cpp dan harnessnya di tests/uji-pengelola.cpp, sehingga Anda bisa melihat tujuan akhir kapan saja sementara tiap bagian membedah potongan yang sedang dikerjakan. Mari kita mulai dari fondasinya: membuat folder contoh dan menjelajah isinya.
Mulai proyek pengelola file: menyiapkan folder contoh secara terprogram dan menampilkan isinya dengan directory_iterator dari std::filesystem.
Buka → # Bagian 2: Mencari dan Memfilter FileTambahkan lapisan filter ke pengelola file: ekstensi, substring nama, dan ukuran minimum, semuanya dikendalikan lewat opsi baris perintah.
Buka → # Bagian 3: Membaca Metadata FileBaca metadata berkas dengan std::filesystem: file_size, permission dalam notasi ringkas, dan last_write_time — termasuk mengapa waktu ubah tidak pernah masuk output terverifikasi.
Buka → # Bagian 4: Menangani Error FileTuntaskan proyek pengelola file: lapisan penanganan galat di main(), pola #ifndef untuk menguji kode asli, program final, dan 22 cek harness yang mengunci seluruh perilaku.
Buka →