2 Kasım 2008 Pazar

Dosyadan Okuma Ve Dosyaya Yazma İşlemleri

Bu yazımda System.IO isim alanı altında bulunan StreamReader ve StreamWriter sınıflarıyla herhangi bir text dosyasından okuma ve dosyaya yazma konularına değineceğim. Programımız bir Windows uygulaması olacak.

Dosyaya Yazma

İlk olarak programımıza System.IO kütüphanesini ekleyelim. Daha sonra formumuza 3 adet TextBox ekleyelim ve Name özelliklerini sırasıyla txtAd, txtSoyad, txtNo olarak belirleyelim. Ek olarak 1 adet Button ekleyelim ve Name özelliğini btnYaz olarak belirleyelim.
Form üzerine çit tıkladıktan sonra kod tarafında yol isimli string türünde bir genel değişken tanımlayalım ve aşağıdaki değeri verelim.
string yol = @"C:Kayıt.txt";
Bu yolla C sürücüsünde Kayıt.txt isimli bir metin belgesi oluşturacağız. Daha sonra yine genel değişken olarak StreamWriter tipinde yaz isimli bir değişken tanımlayalım. Bu değişkeni, bizim dosyamıza yazma işlemini gerçekleştirebilmek için tanımladık.
StreamWriter yaz;
Formu çift tıkladığımızda oluşan Form1_Load olayı içine aşağıdaki satırı yazalım.
yaz = new StreamWriter(yol, true);
Burada daha önce tanımladığımız yaz ismindeki değişkenden StreamWriter tipinde bir nesne oluşturuyoruz. Bu nesnedeki yol değeriyle C sürücüsünde Kayıt.txt isimli bir metin belgesi oluşuyor. true değeri ise bu metin belgesine veri ekleme işleminin olabileceğini belirtiyor. Yani içinde bir veri varsa onun sonraki satırından itibaren girdiğimiz veriyi ekliyor. Eğer false değeri girersek metin belgesinin içeriğini temizler ve yerine bizim girdiğimiz yeni verileri yazar.
Forma dönüp butonun üzerine çift tıklayarak btnYaz_Click olayını oluşturalım. Bu olay yordamının içine aşağıdaki satırları girelim.
string veri = txtAd + " " + txtSoyad + " " + txtNo;
yaz.WriteLine(veri);
yaz.Flush();
Bu satırlarda veri isimli değişkene TextBox’ lardaki veriler aralarında birer boşluk bırakılarak giriliyor. Daha sonraki satırda ise veri isimli değişkenin değeri metin belgesine aktarılmak üzere belleğe yazılıyor. Son satırda ise veri metin belgesine aktarılıyor. Son satır olmazsa veri bellekten bir süre sonra silinir ve belgeye yazılmaz.

Programın tam kodu aşağıdaki gibidir.
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
 
namespace MetinBelgesiOluştur 
{
      public partial class Form1 : Form
      {          public Form1()
          {
              InitializeComponent();
          }

          string yol = @"C:Kayıt.txt";
          StreamWriter yaz;

          private void Form1_Load(object sender, EventArgs e)
          {
              yaz = new StreamWriter(yol, true);
          }

          private void btnYaz_Click(object sender, EventArgs e)
          {
              string ad = txtAd.Text;
              string soyad = txtSoyad.Text;
              string no = txtNo.Text;
              string veri = ad + " " + soyad + " " + no;
              yaz.WriteLine(veri);
              yaz.Flush();
          }
      } 
}

Dosyadan Okuma

Burada da yukarıdakine benzer işlemler yapacağız. Yukarıda yaptığımız gibi yine forma 3 adet TextBox ve 1 adet Button ekleyelim. Button nesnesinin adını bu kez btnOku olarak verelim. Yine aynı adrese sahip yol değişkenimizi belirleyelim. Burada yol ile belirtilen adreste yukarıdaki uygulama esnasında bir dosya oluşturuldu.

Daha sonra ise StreamReader tipinde oku isimli bir değişken tanımlayalım. Bu değişken ise dosyadan okuma işlemini yapmamıza yardımcı olacak.

Yine Form1_Load olayı içerisine aşağıdaki satırı yazarak nesnemizi oluşturalım. Burada form yüklendiği anda bu nesne oluşturulacak.
if (File.Exists(yol))
           oku = new StreamReader(yol);
İlk satırı yazmamızın sebebi; eğer tanımlanan adreste bir dosya yoksa programın çökmesini engellemek içindir.

Yine yukarıdaki gibi formda buton üzerine çift tıklayıp btnOku_Click olay yordamının içine aşağıdaki kodları yazalım.
if (File.Exists(yol) && oku.Peek() > 0)
{
      string veri = oku.ReadLine();
      string[] str = veri.Split(' ');
      txtAd.Text = str[0];
      txtSoyad.Text = str[1];
      txtNo.Text = str[2];
}
if (File.Exists(yol) && oku.Peek() <= 0)
{
      oku.Close();
      oku = new StreamReader(yol);
}
Bu satırlarda ise yine dosyanın olup olmadığı kontrol ediliyor. Ardından dosyadan okunan satırların bitip bitmediği de oku.Peek() ile kontrol ediliyor. Bu komut okuma işlemi yapıldıktan sonra geriye dönen değer yani okunan bir veri olup olmadığını kontrol ediyor.
string veri = oku.ReadLine();
satırı ile de dosyadan 1 satırlık bilgi okuyor ve imleç ve alt satırın başına geçiyor. Ve okunan bilgiyi veri değişkenine atıyor. Sonraki satırda ise, gelen bilgiler
“Tayfun Taşkın 01”
“Ali Veli 02”
“Ahmet Mehmet 03”
gibi aralarında boşluk olan 3 adet kelimenin oluşturduğu bir veri dizisi olduğu için Split() fonksiyonu ile bu kelimeler ayrılıyor ve str adlı diziye atılıyor. Eğer aralarında “-“ işareti olsaydı fonksiyon Split(‘-‘) şeklinde yazılacaktı.

Bu işlemden sonra ise str dizisindeki 3 adet veri sırayla TextBox’ lara yazılıyor.
Son kısımdaki if yapısında ise okunacak veri kalmadıysa tekrar dosyanın başına dönülüyor. Bu işlemi okuma işleminde geriye dönük okuma olmadığı için gerçekleştirdik. Burada okuma işlemi sonlandırılıp yeniden başlatılıyor.

Programın tam kodu aşağıdaki gibidir.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
namespace MetindenOku
{
      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }

          string yol = @"C:Kayıt.txt";
          StreamReader oku;

          private void btnOku_Click(object sender, EventArgs e)
          {
              if (File.Exists(yol) && oku.Peek() > 0)
              {
                  string veri = oku.ReadLine();
                  string[] str = veri.Split(' ');
                  txtAd.Text = str[0];
                  txtSoyad.Text = str[1];
                  txtNo.Text = str[2];
              }
              if (File.Exists(yol) && oku.Peek() <= 0)
              {
                  oku.Close();
                  oku = new StreamReader(yol);
              }
          }

          private void Form1_Load(object sender, EventArgs e)
          {
              if (File.Exists(yol))
                  oku = new StreamReader(yol);
          }
      } 
}

Bu yazımda da System.IO isim alanındaki iki önemli sınıfı anlatmaya çalıştım. Sormak istediğiniz bir şey varsa bana mail atabilir ya da bu yazı için yorum yapabilirsiniz.

Hiç yorum yok:

Yorum Gönderme

Related Posts Plugin for WordPress, Blogger...