Operasi berkas adalah area di mana kegagalan bukan kejadian langka, melainkan kondisi sehari-hari: berkas belum ada, folder induknya terhapus, atau berkas berada di luar izin pengguna. Karena itu operasi I/O hampir selalu dibungkus try-catch, dengan jenis exception yang dipilih sesuai penyebabnya.
Exception I/O yang Paling Sering #
| Exception | Penyebab khas |
|---|---|
FileNotFoundException | berkas yang dituju tidak ada |
DirectoryNotFoundException | folder induk pada path tidak ada |
UnauthorizedAccessException | izin tidak mencukupi |
IOException | galat I/O umum; dua exception di atas adalah turunannya |
Urutan catch penting: blok yang lebih spesifik harus ditulis lebih dulu, karena compiler menolak blok untuk tipe yang sudah tertangkap di atasnya. Bila satu handler cukup untuk beberapa kasus, menangkap IOException saja akan mengikutkan kedua subclass-nya secara otomatis. Objek exception itu sendiri memuat path yang bermasalah dan pesan dari sistem operasi, bahan yang berguna dicatat ke log sebelum program mengambil tindakan pemulihan.
Contoh Tiga Kasus Kegagalan #
Contoh berikut memicu tiga kegagalan berbeda dan menangkap masing-masing exception:
string dir = Path.Combine(Path.GetTempPath(), "verify-6c", "penanganan-kesalahan-file");
Directory.CreateDirectory(dir);
try
{
File.ReadAllText(Path.Combine(dir, "tidak-ada.txt"));
}
catch (FileNotFoundException)
{
Console.WriteLine("Kasus 1 -> FileNotFoundException");
}
try
{
File.ReadAllText(Path.Combine(dir, "tidak-ada", "x.txt"));
}
catch (DirectoryNotFoundException)
{
Console.WriteLine("Kasus 2 -> DirectoryNotFoundException");
}
string terkunci = Path.Combine(dir, "terkunci.txt");
File.WriteAllText(terkunci, "data awal");
File.SetUnixFileMode(terkunci, UnixFileMode.UserRead);
try
{
File.WriteAllText(terkunci, "data kedua");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("Kasus 3 -> UnauthorizedAccessException");
}
finally
{
File.SetUnixFileMode(terkunci, UnixFileMode.UserRead | UnixFileMode.UserWrite);
}Output yang Dihasilkan:
Kasus 1 -> FileNotFoundException
Kasus 2 -> DirectoryNotFoundException
Kasus 3 -> UnauthorizedAccessExceptionMari kita bedah baris demi baris:
- Kasus 1: folder kerja ada, tetapi berkas
tidak-ada.txttidak pernah dibuat, sehinggaFileNotFoundExceptiondilempar. - Kasus 2: folder
tidak-adatidak pernah dibuat; walau yang diminta berkas, yang hilang adalah induknya, sehinggaDirectoryNotFoundExceptionyang muncul. - Kasus 3: mode
UserReadsaja membuat penulisan kedua ditolak sistem, sehinggaUnauthorizedAccessExceptionmuncul — izin diatur denganUnixFileModedari bab File Permissions. - Blok
finally: memulihkan izin menulis agar berkas bisa dibersihkan normal bersama folder kerjanya.