Hampir semua program menyentuh disk: membaca berkas konfigurasi saat aplikasi berjalan, menyimpan log ke folder tertentu, atau menyalin hasil ekspor ke lokasi lain. Untuk kebutuhan dasar semacam itu, .NET menyediakan dua class statis di namespace System.IO, yaitu File untuk berkas dan Directory untuk folder. Keduanya bekerja lewat string path, sehingga kita bisa memanggil operasinya tanpa membuat objek apa pun terlebih dahulu.
Dua Class Statis di System IO #
Method pada File dan Directory menerima path sebagai string, lalu mengembalikan bool untuk pemeriksaan, string[] untuk daftar isi, atau tanpa nilai untuk operasi seperti penyalinan. Tabel berikut merangkum pasangan method yang paling sering dipakai:
| Kebutuhan | Method File | Method Directory |
|---|---|---|
| Memeriksa keberadaan | File.Exists(path) | Directory.Exists(folder) |
| Membuat | File.Create(path) | Directory.CreateDirectory(folder) |
| Menyalin | File.Copy(sumber, tujuan) | tidak tersedia |
| Menghapus | File.Delete(path) | Directory.Delete(folder, recursive: true) |
| Daftar isi | tidak tersedia | Directory.GetFiles(folder) |
Selain pasangan statis itu, .NET juga menyediakan FileInfo dan DirectoryInfo yang membungkus satu path menjadi objek. Bentuk instance menguntungkan bila kita berulang kali membaca property seperti Length atau Attributes, karena hasilnya diperiksa sekali dan dipakai berkali-kali. Bab-bab di section ini lebih sering memakai bentuk statis karena lebih ringkas untuk skrip sederhana.
Contoh Operasi Dasar #
Contoh berikut membuat folder kerja sementara, menulis satu berkas, menyalinnya ke subfolder arsip, lalu menghapus berkas aslinya:
string dir = Path.Combine(Path.GetTempPath(), "verify-6c", "file-dan-directory");
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "catatan.txt");
File.WriteAllText(path, "Halo dari File dan Directory");
Directory.CreateDirectory(Path.Combine(dir, "arsip"));
File.Copy(path, Path.Combine(dir, "arsip", "catatan-lama.txt"), overwrite: true);
Console.WriteLine($"Folder ada: {Directory.Exists(dir)}");
Console.WriteLine($"File ada: {File.Exists(path)}");
foreach (string nama in Directory
.GetFiles(dir, "*", SearchOption.AllDirectories)
.OrderBy(Path.GetFileName))
{
Console.WriteLine(Path.GetFileName(nama));
}
File.Delete(path);
Console.WriteLine($"Setelah dihapus: {File.Exists(path)}");Output yang Dihasilkan:
Folder ada: True
File ada: True
catatan-lama.txt
catatan.txt
Setelah dihapus: FalseMari kita bedah baris demi baris:
Directory.CreateDirectory(dir): method membuat seluruh folder induk yang belum ada sekaligus; pemanggilan ulang pada folder yang sudah ada tidak menimbulkan galat.File.WriteAllText(path, ...): membuat berkas baru atau menimpa isi lama dalam satu panggilan; berkas otomatis ditutup setelah selesai.File.Copy(..., overwrite: true): menyalin berkas ke subfolder; argumenoverwritewajib bernilaitruebila berkas tujuan mungkin sudah ada, jika tidakIOExceptiondilempar.GetFiles(..., SearchOption.AllDirectories): mengumpulkan berkas dari folder kerja dan subfolderarsip;OrderBymembuat urutan cetak stabil.File.Delete(path): menghapus berkas; pemeriksaanFile.Existssetelahnya mengembalikanFalse, sementara salinannya tetap utuh di arsip.