HOŞ GELDİNİZ καλωσόρισμα

10 Mart 2013 Pazar

C# Kendi verinizi kendiniz saklayın: UYGULAMA

Kendi verinizi kendiniz saklayın: KAYNAK DOSYAYI İNDİR

Binary serileştirme ile ilgili son örneğimiz, tıpkı bir veritabanı kullanır gibi kendi verimizi saklayıp daha sonra istediğimiz zaman erişebileceğimiz bir uygulama.
Uygulamamızda, Storage sınıfı saklayacağımız veriyi biçimlendirmek için kullanacağımız sınıf olmakla beraber bu örnekte içerisinde sadece temel metodları barındırmaktadır.
Veri saklamak için klasik Hashtable yapısını kullanacağız. C# için bir konsol uygulaması başlatıyoruz ve yeni bir sınıf ekleyip adını “Storage.cs” olarak ayarlıyoruz.
Storage.cs:
//istedigimiz program datasini kaydetmek icin, serializable bir class yaratiyoruz
[Serializable]
public class Storage
{
private Hashtable storageData; //ikili tablo olarak saklayacagimiz verileri tutacak
public Storage() {
//constructor metodumuz, deseriazlize edildigi zaman //cagirilmayacagi icin, icerisine onemli islemleri yazmiyoruz.
storageData = new Hashtable(); }

//yeni bir datayi saklamak istedigimizde, kullanacagimiz metod.
public void AddData(object data, string identifier)
{
if(!isExists(data) || !isExists(identifier))
{
storageData.Add((object) identifier,data);
} }

//herhangi bir data silmek istedigimizde, bu metod yardimimiza kosuyor.
public void RemoveData(string identifier) {
if(isExists(identifier))
{
storageData.Remove((object) identifier);
} }

//hashtable icerisindeki bir verinin, key ini aramak icin
public string GetIdentifier(object data) {
if(isExists(data))
{
foreach(string strKey in storageData.Keys)
{
if(storageData[strKey] == data)
{
return strKey;
}
}

return null;
}
return null; }

//storageData hashtableimizi dondurecek property.
public Hashtable storage {
get {
return this.storageData;
}
}

#region Herhangi bir verinin HashTable icerisinde olup olmadigini degerlendir private bool isExists(object dataToSearch)
{
if(storageData != null)
{
if(storageData.ContainsValue(dataToSearch))
{
return true;
}
}
return false;
}

private bool isExists(string idToSearch)
{
if(storageData != null)
{
if(storageData.ContainsKey((string) idToSearch))
{
return true;
}
}
return false;
}
#endregion

Storage sınıfımız hazır olduğuna göre artık bu sınıfı kullanarak saklanan veriyi serileştiren uygulamamızı yazabiliriz.

class Class1
{
//storage nesnemizin ornegini olusturuyoruz.
private static Storage sakla;
//ikili (binary) serilestirme icin interface ornegini tanimliyoruz.
private static IFormatter IBinaryBicimle;
//serilestirilmis datayi hangi dosyada saklayacagimiz.
private static string storageFileName = "myDatabase.bin";
//dosyaya yazmak icin kullanacagimiz strem
private static Stream isle;

[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Serilestirme ornek projesi, by scriptMan");

//storage nesnemize saklanacak verileri yaziyoruz
sakla = new Storage();
for(int i=0; i<50 font="" i="">
{
sakla.AddData(i,"saklanan"+i);
}

Console.WriteLine("Serilestirme islemine baslamak icin bir tusa basin");
Console.ReadLine();

DoSerialize(); //serilestir

Console.WriteLine("Serilestirme tamamlandi, Serilestirilen veriyi okumak icin bir tusa basiniz");
Console.ReadLine();

PurgeData(); //deserialize et, ve ekrana yaz.

Console.ReadLine();
}

private static void PurgeData()
{
//serilestirilmis nesneyi geri cagirip, datayi ekrana basalim
IBinaryBicimle = new BinaryFormatter();
isle = new FileStream(storageFileName,FileMode.Open,FileAccess.Read);
sakla = (Storage) IBinaryBicimle.Deserialize(isle);
isle.Close();

System.Collections.Hashtable serializedHashTable = sakla.storage;

foreach(string strData in serializedHashTable.Keys)
{
Console.WriteLine("Key: {0} Data: {1}",strData,serializedHashTable[strData]);
}
}

private static void DoSerialize()
{
//binaryformatter nesnesinin bir ornegini aliyoruz..
IBinaryBicimle = new BinaryFormatter();
//filestream kullanarak, olusturacagimiz dosyayi belirliyoruz..
isle = new FileStream(storageFileName,FileMode.Create,FileAccess.Write);
//serilestirme icin yapmamiz gereke tek sey, binaryformatter nesnemizin..
//serialize metodunu cagirmak ;)
IBinaryBicimle.Serialize(isle,sakla);
isle.Close();

//program icerisinde olusturdugumuz hashtable' in icini temizliyoruz..
//bolece serilestirilmis nesne tekrar okundugunda, otomatik doldugunu..
//gorebilecegiz.
System.Collections.Hashtable htClear = sakla.storage;
htClear.Clear();
}
}

Uygulamamızı çalıştırmadan önce, dahil etmemiz gereken isim uzaylarını da yazmakta fayda görüyorum.

Class1 için;

System.Runtime.Serialization
System.Runtime.Serialization.Formatters.Binary
System.IO

Storage sınıfı için:

System.Collections

Hakan SÜLÜN Byte Online' ın yazarlarındandır. Kendisine hsulun@byte.com.tr adresinden ulaşabilirsiniz

Hiç yorum yok:

Yorum Gönder

En Çok Okunanlar

Etiketler

3G (2) adobe (4) adsl (2) akıllı telefon (40) Amazon (3) android (34) android market (4) Angry Birds (2) Anonymous (3) antivirüs testi (3) Apple (74) application (2) Asus (9) Avea (4) Bilgisayar (13) bilim (42) bilimadamları (13) bim (1) Bing (1) board (1) browser (18) BT (2) Burn (3) CeBIT (2) cep telefonu (75) chrome (13) CISCO (1) CNN (1) Codec (1) da vinci (1) Dell (4) dijital (4) domain (6) donanım (151) doodle (2) download (4) e- mail (8) e-book (2) ege üniversitesi (1) eğitim (38) einstein (1) enerji (4) explorer (1) facebook (63) FIFA (5) fiber (3) fiber ağ (1) fibernet (2) firefox (12) fizy (1) Fotoğraf (10) fotoğraf makinesi (7) fullyfollowme (2) Galaxy Note (5) gmail (4) Google (56) Google Earth (3) google play (8) google+ (8) gsm (3) güvenli internet (19) güvenlik açığı (5) güvenlik tehditi (10) hacker (7) harddisk (4) hotmail (3) HP (12) HTC (3) IBM (1) IEEE (1) iletişim (12) index (1) instagram (6) intel (5) internet (122) internet explorer (8) internet explorer 9 (5) iOS (11) İpad (13) iPad 3 (5) iphone (39) iPhone 4S (1) iPhone 5 (9) İslam ZEYTİN (43) istanbul (3) iTunes (3) kamera (12) KeepVid (2) kitap (4) klavye (2) Laptop (2) Led (4) Led TV (2) LG (9) linkedin (2) Mac (8) marc zuckerberg (2) microsof office 2010 (3) Microsoft (52) Microsoft Security Essentials (2) mobil (101) Motorola (2) mozilla (4) MS (1) MSI (2) müzik (4) Nasa (8) nikon (3) Nintendo (2) nokia (15) Notebook (3) Numara taşıma (1) ODTÜ (4) Ofis (4) operatör (6) oyun (72) oyun köşesi (3) oyuncak (2) padfone (2) Pahalı İnternet (1) panasonic (1) para (3) Pardus (1) PC (8) Pepee (1) Pil (10) Ping (1) Playstation (7) programlama (6) projeksiyon (1) rasat (1) Raspberry pi (3) Rekabet (6) reklam (25) sağlık (14) Samsung (49) Samsung Galaxy (13) Sık Sorulanlar (42) Siber Saldırı (5) sim (5) Sinema (3) skype (15) smart tv (3) sms (3) sony (17) sosyal medya (73) Steve Jobs (3) SUPER 8 (1) suriye (1) şifre (7) Tablet (23) tarayıcı (6) tarih (2) tasarım (3) tehlike (23) Teknoloji (50) telefon (7) Televizyon (4) Tivibu (1) toolbar (1) Toshiba (4) ttnet (14) turkcell (21) türkiye (75) türktelekom (4) tv (12) twitter (21) ultrabook (7) usb (3) uydu (12) uygulama (38) uzay (17) üniversite (30) ürün inceleme (48) Vadofone (7) Vaio (1) Video indirme (5) virus (10) vitamin (1) VLC Media Player (1) Web (5) web kamera (1) web sitesi (8) webcam (1) Wii (3) Windows (37) Windows 8 (44) windows xp (2) X Box (5) yahoo (3) Yama (1) yandex (8) yaşam (2) yazı dizisi (9) yazılım (116) yeni ürün (6) Youtube (17) zararlı (3) Zuckerberg (3) Ελληνική ειδήσεις (5)