Pasangan StreamReader adalah StreamWriter: class yang menerima karakter dari kode kita, lalu mengubahnya menjadi byte dengan encoding tertentu sebelum dikirim ke stream. Berbeda dari File.WriteAllText yang menulis semuanya sekaligus, StreamWriter mengumpulkan tulisan di buffer internal lalu mengalirkannya ke berkas. Pola ini cocok untuk penulisan bertahap: judul dulu, lalu baris demi baris berikutnya, tanpa merangkai seluruh isi dalam satu string besar.

Constructor StreamWriter(path) membuka berkas untuk ditulis dari awal; isi lama otomatis ditimpa. Constructor StreamWriter(path, append: true) membuka berkas pada posisi akhir sehingga tulisan baru menempel setelah data lama. Karena tulisan melewati buffer, pemanggilan Flush() atau pembuangan objek lewat using menentukan kapan data benar-benar sampai ke disk. Property AutoFlush mengubah perilaku bawaan tersebut: bila bernilai true, buffer dituangkan pada setiap Write, dengan konsekuensi panggilan disk yang jauh lebih sering.

Contoh Menyusun Berkas Undangan #

Contoh berikut menulis tiga baris, membuka berkas kembali untuk mode append, lalu memverifikasi isi akhirnya:

csharp
string dir = Path.Combine(Path.GetTempPath(), "verify-6c", "streamwriter");
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "undangan.txt");

using (StreamWriter penulis = new StreamWriter(path))
{
    penulis.WriteLine("Undangan Rapat Produk");
    penulis.WriteLine("Hari : Jumat");
    penulis.WriteLine("Pukul: 10.00 WIB");
}

using (StreamWriter tambahan = new StreamWriter(path, append: true))
{
    tambahan.WriteLine("Tempat: Ruang Rapat 2");
}

foreach (string b in File.ReadLines(path))
{
    Console.WriteLine(b);
}

Output yang Dihasilkan:

text
Undangan Rapat Produk
Hari : Jumat
Pukul: 10.00 WIB
Tempat: Ruang Rapat 2

Mari kita bedah baris demi baris:

  1. new StreamWriter(path): membuka berkas dengan mode timpa; tiga panggilan WriteLine menulis satu baris teks untuk setiap panggilan.
  2. Akhir blok using pertama: Dispose menuangkan sisa buffer ke disk dan menutup berkas.
  3. new StreamWriter(path, append: true): membuka berkas yang sama pada posisi akhir, sehingga isi tiga baris lama tetap utuh.
  4. tambahan.WriteLine(...): menempelkan baris keempat setelah baris ketiga.
  5. File.ReadLines(path): membaca ulang isi berkas; hasilnya empat baris utuh sesuai urutan penulisan.