posto je upitanju prvo parce koda koje sam uradio u c#-u odlucio sam da to okacim ovde :) posto znam da ce kod mene na kompu to da se izgubi relativno brzo a i mozda bude od koristi nekome ovde (od pocetnika za pocetnike)...
elem, kao sto rekoh pocetnik sam u c# programiranju (i .netu uopste) i igram se sa njim vec 2 dana... ja kada odlucim da ucim neki novi jezik izaberem jednu od aplikacija sa moje (povece) want-todo liste i pocnem da je pravim u tom jeziku, aplikacija koju sam poceo da radim izmedju ostalog zahteva (kao i svaki malo veci programcic) i cuvanje/ucitavanje podesavanja, registry sam odma' odbacio, ini fajlovi su malko zastareli da bih ih koristio u .net aplikaciji i jedino sto je ostalo (a da ne moram da pisem svoj parser) je xml.
dakle evo primera jednog konfiguracionog fajla:
Code:
<?xml version="1.0" encoding="utf-8"?>
<dssXML version="1.0">
<config>
<items>
<languagefile type="string">lang/english.xml</languagefile>
</items>
<section name="studio">
<items>
<average type="float">10.73</average>
<bla type="int">42</bla>
<visible type="bool">true</visible>
</items>
<section name="placement">
<section name="position">
<items>
<x type="int">10</x>
<y type="int">80</y>
</items>
</section>
<section name="size">
<items>
<h type="int">768</h>
<w type="int">1024</w>
</items>
</section>
</section>
</section>
</config>
</dssXML>
<?xml version="1.0" encoding="utf-8"?>
<dssXML version="1.0">
<config>
<items>
<languagefile type="string">lang/english.xml</languagefile>
</items>
<section name="studio">
<items>
<average type="float">10.73</average>
<bla type="int">42</bla>
<visible type="bool">true</visible>
</items>
<section name="placement">
<section name="position">
<items>
<x type="int">10</x>
<y type="int">80</y>
</items>
</section>
<section name="size">
<items>
<h type="int">768</h>
<w type="int">1024</w>
</items>
</section>
</section>
</section>
</config>
</dssXML>
dakle root je <dssXML> ovo dss je skracenica naziva tog programcica (nema veze sa onim na sta vas prvo asocira... puj puj puj) a u <config> elementu se nalaze podesavanja, config fajl se sastoji od sekcija (<config> je "root sekcija") i svaka sekcija moze da ima koliko god vam je potrebno <section> (dakle podsekcija) i <items> (u kojima se nalaze podesavanja) elemenata, unutar <items> elementa svaki element predstavlja neku vrednost: <naziv type="tip">vrednost</naziv>, tip moze biti int za celobrojne vrednosti (int), float za floating-point vrednosti (double), bool za true/false vrednosti (bool) (vrednosti true, yes, on i 1 se prevode u true sve ostalo daje false) ili string za string vrednosti (string).
Config.cs definise Config klasu (nema namespace) koja cita/pise ovakav format,
metoda za ucitavanje je void Load( string filename )
a za cuvanje je void Save(string filename[, string ver]) (drugi parametar je opcioni, tj postoji overload sa samo jednim parametrom), ver parametar (ukoliko je prosledjen i nije nullstring) ce biti zapisan kao version atribut root elementa (1.0 u gornjem primeru), ova vrednost se takodje moze podesiti preko version clana klase
takodje pre poziva Load fje je potrebno promeniti rootTag clan (default je "appdata") u primeru gore podesen je na "dssXML", ovo je takodje moguce proslediti i kroz konstruktor koji izgleda ovako:
public Config([string root[, string filename]]) (oba parametra su opciona - postoje 3 overloada konstruktora)
metoda za citanje podataka je object get(string id[, object defaultValue]),
id je string oblika [section.[section.[section...]]]name i case-insesitive je
metoda za pisanje podataka je void set(string id, object value)
postoje i indexeri koji predstavljaju "precice" za get i set metode, znaci umesto config.get("secion.name") mozete pisati config["section.name"] umesto config.set("section.name", 123) mozete pisati config["section.name"] = 123...
to je ja mislim to... e da za ovo vam treba fwk 3.5 posto sam se igrao sa linqom :)
e da, ukoliko je neko od malo iskusnijih c#/.net developera dokon zamolio bih ga da proceslja kod i da mi kaze gde sam napravio gresku i koju (siguran sam da ima pocetnickih gresaka)...









C# xml config file read/write