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.
Menulis dari Awal versus Menambah #
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:
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:
Undangan Rapat Produk
Hari : Jumat
Pukul: 10.00 WIB
Tempat: Ruang Rapat 2Mari kita bedah baris demi baris:
new StreamWriter(path): membuka berkas dengan mode timpa; tiga panggilanWriteLinemenulis satu baris teks untuk setiap panggilan.- Akhir blok
usingpertama:Disposemenuangkan sisa buffer ke disk dan menutup berkas. new StreamWriter(path, append: true): membuka berkas yang sama pada posisi akhir, sehingga isi tiga baris lama tetap utuh.tambahan.WriteLine(...): menempelkan baris keempat setelah baris ketiga.File.ReadLines(path): membaca ulang isi berkas; hasilnya empat baris utuh sesuai urutan penulisan.