StreamWriter ve StreamReader Nesneleri Datalarımızı saklamak için genelde Access yada SQL Server gibi yapıları kullanırız. Ancak bazı durumlarda bu veritabanları yerine bir *.txt dosyalarını kullanmak, işlemlerinizi çok daha kolaylaştıracaktır. Bu makalemizde StreamWriter ve StreamReader nesnelerini inceleyeceğiz.

Öncelikle bir Windows uygulaması başlatalım. Formumuzun üzerine bir richTextBox ve bir de buton sürükleyip bırakalım. Bu yapıları kullanabilmek için System.IO kütüphanesini projenize dahil ediniz ve button’un click eventine aşağıdaki kodu yazalım.

 

using System.IO; //Eklemeyi unutmayın

private void button1_Click(object sender, EventArgs e)

{

StreamWriter s_writer = new StreamWriter(@”c:\ahmetsait.txt”, false,Encoding.Default);

s_writer.Write(richTextBox1.Text);

s_writer.WriteLine();

s_writer.Write(“Ahmet Sait DURAN”);

s_writer.Close();

}

 

Şimdi yukarıdaki kod bloğunu inceleyelim. StreamWriter’ı oluştururken vermiş olduğumuz ilk parametre c:\ahmetsait.txt dosyasını arayacak ve bu dosyayı bulamazsa kendisi oluşturacaktır. İkinci parametrede ya true yada false değerleri kullanılabilir. True, eğer dosyanın içerisinde daha önceden yazılmış birşeyler varsa onları silme, gönderdiklerimizi dosyaya ekle (append) demektir. False ise butona her tıkladığınızda dosyanın içerisindekileri silecek ve yeni gönderdiklerinizi yazacaktır. Son parametrede ise, txt dosyasının içerisine yazı yazılırken hangi dil kodlamasının kullanılacağını belirleyen seçenektir. Encoding.Default, işletim sistemini kurarken belirlediğiniz klavye ve dil ayarlarını kullanarak yazma işlemini gerçekleştirecektir. Write metodu yazmak için, WriteLine metodu ise yeni bir satıra geçip yazmak için kullanılır. Son olarak, işlemlerinizi gerçekleştirdikten sonra muhakkak Close() metodu ile StreamWriter nesnesini kapatınız. Aksi halde dosya açık kalacak ve butona bir kez daha tıklarsanız projeniz kırılacaktır. Projenizi çalıştırdığınızda sonuç aşağıdaki gibi olacaktır.

streamwriter-ve-streamreader-1

streamwriter-ve-streamreader-1

streamwriter-ve-streamreader-2

streamwriter-ve-streamreader-2

 

StreamReader ise verileri okumak için kullandığımız yapıdır. Buton’un Click eventine bu sefer aşağıdaki kodu yazalım.

 

using System.IO; //Eklemeyi unutmayın

private void button2_Click(object sender, EventArgs e)

{

StreamReader s_reader = new StreamReader(@”c:\ahmetsait.txt”,Encoding.Default);

richTextBox1.Text = s_reader.ReadToEnd();

s_reader.Close();

}

 

Yukarıdaki kodu açıklayacak olursak, StreamReader’ı oluştururken kullandığımız ilk parametre, hangi dosyanın okunacağını, ikinci parametre ise okurken kullanılacak dil seçeneğini belirtmektedir. ReadToEnd() metodu, ilgili dosya içinde ne varsa hepsinin okunmasını sağlamak için kullanılan metoddur. İşlemimizi tamamladıktan sonra Close() ile dosyayı muhakkak kapatıyoruz. Uygulamanızı çalıştırdığınızda sonuç aşağıdaki gibi olacaktır.

 

streamwriter-ve-streamreader-3

streamwriter-ve-streamreader-3

Şimdi de konuyu daha net anlamak adına şöyle güzel bir örnek yapalım. Aşağıdaki gibi bir form oluşturalım.

 

streamwriter-ve-streamreader-4

streamwriter-ve-streamreader-4

Bu örneğimizde bir text dosyasına “Adı” ve “Soyadı” şeklinde 2 tane kolon oluşturacağız. Ancak burada dikkat etmemiz gereken husus, “Adı” kolonundaki değer çok uzun olursa hizası bozulmuş, düzensiz bir görünüm oluşacaktır. Bunu önlemek için de “Adı” kolonuna girilen değeri 20 karaktere tamamlayan bir fonksiyon yazdım (Daha farklı çözümler de üretilebilirdi). Kodumuz aşağıdaki gibi olacaktır:

 

using System.IO; //Eklemeyi unutmayın

private string karaktertamamla(string adi)

{

string bosluk = ” “;

do

{

adi += bosluk;

} while (adi.Length < 20);

return adi;

}

 

private void button1_Click(object sender, EventArgs e)

{

FileInfo dosya = new FileInfo(@”c:\kayitlar.txt”);

string adi, soyadi;

adi = textBox1.Text;

soyadi = textBox2.Text;

StreamWriter s_writer;

if (dosya.Exists == false)

{

s_writer = new StreamWriter(@”c:\kayitlar.txt”, true,Encoding.Default);

s_writer.Write(karaktertamamla(“ADI”));

s_writer.Write(“SOYADI”);

s_writer.WriteLine();

s_writer.Write(karaktertamamla(“—–“));

s_writer.Write(“—–“);

s_writer.WriteLine();

s_writer.Write(karaktertamamla(adi));

s_writer.Write(soyadi);

s_writer.Close();

}

else

{

s_writer = new StreamWriter(@”c:\kayitlar.txt”, true,Encoding.Default);

s_writer.WriteLine();

s_writer.Write(karaktertamamla(adi));

s_writer.Write(soyadi);

s_writer.Close();

}

}

 

Programı çalıştırıp, birkaç veri girişi yaparsanız, kayitlar.txt dosyasındaki görüntünüz aşağıdaki gibi olacaktır.

 

streamwriter-ve-streamreader-5

streamwriter-ve-streamreader-5

Başka bir makalede tekrar görüşmek dileğiyle. Hepinize iyi çalışmalar…