25 Mayıs 2008 Pazar

C# harddiske veri kaydetme

C# ta listView , listBox veya bunlara benzer kontrollerdeki veriler kolayca harddiske kaydedilir böylece uygulamanın tekrar açılışında veri kaybını önlemiş oluruz. İlk önce kaydedeceğimiz veriler bir class içinden alınıyorsa bu class a bi attribute eklememiz gerekiyor. class tanımlamadan önce namespace tanımlamasından sonra [Serializable] ekliyoruz.
Kullancağım değişkeni önce beilirteyim kisiler diye bir class tipinde dizi değişkenimiz var ve kaydetmek istediğimiz veriler bunun içinde olsun.
System.IO namespace altında tanımlanan özellikleri kullanacağız bu yüzden projenize bunu eklemeyi unutmayın.
Bir buton sayesinde kaydetme işlemi yapacağız. Buton click event ine aşağıdaki kodları yazmamız gerekiyor.
FileStream fs = new FileStream("Fihrist.bak", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, kisiler);
fs.Close();
MessageBox.Show("Kaydedildi");

FileStream bize dosyayı istediğimiz yerde oluşturup onu ne yapacağımızı bildirdiğimiz kısımdır. Burada
FileStream("Fihrist.bak", FileMode.Create); FileStream e verilen ilk parametre dosyayı kaydedeceğimiz yerdir. C:/Fihrist.bak şeklinde yazarsak C'nin altına kaydedecektir sadece ismini yazarsak bizim projemizde bulunan bin dosyasının altındaki Debug klasörünün altına kaydedecektir. İstediğimiz ismi ve uzantıyı verebiliriz. Burada FileMode ile ise bu yeni bir dosya oluşturacağımızı söylüyoruz. İstersek var olan dosyayı da açabiliriz.
Dosyayı kullandıktan sonra kapatmayı unutmayın yoksa açık kalır :D
BinaryFormatter asıl işi yapar verimizi Serialize metodu sayesinde dosyaya binary halinde kaydeder. İşte bu kadar...
Daha sonra diyelim bu dosyadaki verileri açıp gereken yere koymak istiyoruz. O zaman şunları da Formun Load event ine yazın
FileInfo fInfo = new FileInfo("Fihrist.bak");
if (fInfo.Exists)
{
FileStream fs = new FileStream("Fihrist.bak", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
kisiler = bf.Deserialize(fs) as List;
fs.Close();
Listele();
}

Buradaki Listele() metodu benim verilerimi ListView e yazmaya yarıyor. Fazla uzatmayayım en kısa bu kadar oldu.

Hiç yorum yok: