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 #

ExceptionPenyebab khas
FileNotFoundExceptionberkas yang dituju tidak ada
DirectoryNotFoundExceptionfolder induk pada path tidak ada
UnauthorizedAccessExceptionizin tidak mencukupi
IOExceptiongalat 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:

csharp
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:

text
Kasus 1 -> FileNotFoundException
Kasus 2 -> DirectoryNotFoundException
Kasus 3 -> UnauthorizedAccessException

Mari kita bedah baris demi baris:

  1. Kasus 1: folder kerja ada, tetapi berkas tidak-ada.txt tidak pernah dibuat, sehingga FileNotFoundException dilempar.
  2. Kasus 2: folder tidak-ada tidak pernah dibuat; walau yang diminta berkas, yang hilang adalah induknya, sehingga DirectoryNotFoundException yang muncul.
  3. Kasus 3: mode UserRead saja membuat penulisan kedua ditolak sistem, sehingga UnauthorizedAccessException muncul — izin diatur dengan UnixFileMode dari bab File Permissions.
  4. Blok finally: memulihkan izin menulis agar berkas bisa dibersihkan normal bersama folder kerjanya.