C# da Konfigürasyon dosyası oluşturup kaydetme

Başlatan Mucit23, 30 Ekim 2024, 00:54:22

Mucit23

Selamlar

C#'da farklı çalışma modları için oluşturmuş olduğum ayarları yada parametreleri dışarı export edip tekrarda projeye aktarmak istiyorum.

Her bir çalışma modunda 50-60 farklı parametre var. Farklı çalışma modları için bu parametrelerin değişmesi gerekiyor. Daha sonra kolaylık olması açısından da bu parametreleri bilgisayarda bir yere uygun bir dosya formatı kaydedip sonra istediğimde tekrar projede açıp okumak istiyorum.

Bunun için hangi dosya formatları uygun olur?

Erol YILMAZ


Yuunus


tunayk

En sade hali tüm parametrelerin ToString() çıktılarını virgülle ayırarak uç uca ekler ve bir text elde edersiniz. Sonra da bunu File.Write fonksiyonları ile yazarsınız. Geri okurken parse işlemi yapmanız gerek.

Newtonsoft kütüphanesi ile Json olarak kaydedersiniz. Parse işlemine gerek kalmaz.

Alternatif çok

Mucit23

Selamlar

Bu konuda ufak bir çalışma yaptım. Yazmada sorun yok ama XML okuma konusunda bir sorum olacak.

Aşağıdaki gibi bir XML dosyam var.
<?xml version="1.0" encoding="utf-8"?>
<ProgramID=1>
  <Parameter_1>72</Parameter_1>
  <Parameter_2>15</Parameter_2>
  <Parameter_3>120</Parameter_3>
  <Parameter_4>34</Parameter_4>
  <Parameter_5>65</Parameter_5>
</ProgramID=1>
<ProgramID=2>
  <Parameter_1>23</Parameter_1>
  <Parameter_2>54</Parameter_2>
  <Parameter_3>69</Parameter_3>
  <Parameter_4>345</Parameter_4>
  <Parameter_5>87</Parameter_5>
</ProgramID=2>
<ProgramID=3>
  <Parameter_1>72</Parameter_1>
  <Parameter_2>59</Parameter_2>
  <Parameter_3>160</Parameter_3>
  <Parameter_4>368</Parameter_4>
  <Parameter_5>54</Parameter_5>
</ProgramID=3>

Burada buna benzer ID değeri 100'e kadar uzanan parametrelerim olacak. Bu parametreleri okurken ID ve ID'ye bağlı alt parametreleri nasıl seçip okurum. Örneğin 3 numaralı ID içerisindeki parametreleri okumak istiyorum gibi.


kimlenbu

XmlReader Class örneklerini aratırsanız oldukça kolay, sizin string işler gibi işlemenize gerek kalmıyor. Tip, element adı, değeri vs her şeyi kolayca döngü içinde okuyabilirsiniz veya arama bile yapabilirsiniz.

tunayk

XML bu iş için demode ve zahmetli yol. Siz Newtonsoft ve JSON kullanın.

Mucit23

JSON dosya formatını da deneyeceğim ama XML ile for döngüsünde bir XML dosya oluşturmak istediğimde bir hata alıyorum.

Şöyle bir kod yazdım.
            XmlTextWriter xmlTextWriter = new XmlTextWriter(@"ProgramFile.xml", Encoding.UTF8);
            xmlTextWriter.Formatting = Formatting.Indented;
            xmlTextWriter.WriteStartDocument();
            for (int i = 0; i < 5; i++)
            {
                xmlTextWriter.WriteStartElement("ProgramID=" + i.ToString());
                xmlTextWriter.WriteElementString("Program Name", "Program");
                xmlTextWriter.WriteElementString("Parameter_1", "72");
                xmlTextWriter.WriteElementString("Parameter_2", "72");
                xmlTextWriter.WriteElementString("Parameter_3", "72");
                xmlTextWriter.WriteElementString("Parameter_4", "72");
                xmlTextWriter.WriteElementString("Parameter_5", "72");
                xmlTextWriter.WriteEndElement();
            }
            xmlTextWriter.WriteEndDocument();
            xmlTextWriter.Close();

Bu kodu çalıştırdığımda "Epilog durumundaki StartElement belirteci geçersiz bir XML belgesi oluşmasına neden olur.'" Şeklinde bir hata alıyorum. Bold olarak belirttiğim satıra işaret ediyor.

xmlTextWriter.WriteStartElement("ProgramID=" + i.ToString());

Burada hata var gibi.

Belirlediğim for döngüsündeki sayı kadar elemanları arttırsın istiyorum basit olarak ama anlayamadım neden hata verdiğini. Açıklayabilecek olan var mı?

tunayk


elektronikhobi

Linux altında C# ile basit bir xml belgesi oluşturan örnek yazdık.

// simit.cs

using System.Xml;
using System;

var ayarlar = new XmlWriterSettings()
{
    Indent = true,
};

using XmlWriter yazıcı = XmlWriter.Create("simit.xml", ayarlar);

yazıcı.WriteStartDocument();

yazıcı.WriteStartElement("simit");
yazıcı.WriteValue(10);
yazıcı.WriteEndElement();

yazıcı.WriteEndDocument();

Console.WriteLine("XML belgesi oluşturuldu");

Derlemek için csc simit.cs yazabiliriz.

Uygulamayı çalıştırmak için mono simit.exe yazıyoruz.

Çıktı olarak "XML belgesi oluşturuldu" yazması beklenir.

Son olarak içeriğine bakalım.

cat simit.xml

Alıntı Yap<?xml version="1.0" encoding="utf-8"?>
<simit>10</simit>⏎

Burada da "Bir XML belgesi root etiketleri arasında olmalıdır" demişler.

<root>
   ...
</root>
"Yirminci asrın akıllara hayret veren keşiflerinden birisi de hiç şüphesiz transistörlerdir."


Mucit23

Evet XML dosyası ile bunu çözdüm. Çok teşekkür ediyorum. Gayet istediğim gibi oldu.