Resgen.exe parancssori alkalmazás
Az erőforrásfájl generátor segédprogram (RESGEN.EXE) alapértelmezésben a <winroot>:\\Program Files\Microsoft Visual Studio.NET\FrameworkSDK\Bin\ResGen.exe elérési útvonalon található, és igen hasznos tagja a .NET Framework segédprogram-gyűjteményének.
Ahogy a bevezetőben is említettük, képesek vagyunk a szöveges vagy az XML-alapú .RESX állományokban tárolt, kulcs-érték párok formájában megadott információkat .RESOURCES kiterjesztésű állományokká konvertálni, és azokat egy tetszőleges alkalmazás kódjába beszerkeszteni.
A beszerkesztett állomány a kód részévé válik, így nincs szükség annak fizikai jelenlétére a kód futtatásakor. A program használatának általános szintaxisa a következő:
resgen [/compile] állománynév.kiterjesztés [generált állománynév.kiterjesztés][…]
Egyetlen opcióval elérhetjük, hogy több szöveges, vagy .resx állomány adattartalma kerüljön egy .resources kiterjesztésű állományba.
A forrásállomány-név megadásakor nem kötelező megadni a generálandó állomány nevét. Ekkor a generált állomány neve az állomány nevével megegyezik, csupán a kiterjesztése lesz .resources.
Lássunk ezekre néhány példát. A projekt mappájának /Resources mappájában elhelyeztünk egy szöveges állományt, melynek tartalmát a következőképpen konvertáltuk erőforrás-állománnyá:
Amennyiben a fájl neve nem megfelelő, a második paraméterben egy alternatív nevet is megadhatunk.
Ugyanezt tehetjük egy .resx kiterjesztésű állomány konverziója esetén.
A .resx állományokban tárolt információ szöveges állományokban is elhelyezhető a következőképpen:
resgen myResources.resx myResources.txt
Erőforrások elérése programból
A .resources kiterjesztésű állományok írását és olvasását a System.Resources névtér ResourceWriter és ResourceReader osztályok metódusaival végezhetjük el.
A Resgen.exe program segítségével a Resource.txt állományunkban található információt átkonvertáltuk és a projekthez adtuk erőforrásként. Az állomány tulajdonságai között megfigyelhető, hogy automatikusan az Embedded resource jellemző van beállítva, vagyis a kódba szerkesztődik.
A szöveges állományban eredetileg két kulcs-érték pár található, melyeket az alkalmazás TabControl-jának harmadik füle alatt, a ListBox kontrolban meg is jelenítünk.
Az erőforrásfájl eléréséhez a ResourceReader osztályt kell példányosítanunk úgy, hogy a forrás-adatfolyamot az assembly kódjából olvassuk ki futáskor.
ResourceReader rr = new ResourceReader(GetType().Assembly.GetManifestResourceStream("ResGenUsage.Resource.resources"));
A kiolvasott listát egy DictionaryEntry kollekcióban helyezzük el.
IDictionaryEnumerator en = rr.GetEnumerator();
Az elemek Key és Value property-jeinek értékét lekérdezve juthatunk hozzá az egyes bejegyzésekhez úgy, hogy végigmegyünk a listán.
while (en.MoveNext())
{
listBox1.Items.Add(en.Key.ToString() + " = " + en.Value.ToString());
}
rr.Close();
A Form első füle alatt létrehozhatunk egy tetszőleges nevű állományt, melyben adatokat helyezhetünk el. A létrehozás a File.Create metódussal lehetséges, annak konstruktorában megadva a létrehozandó állomány nevét.
FileStream fs = File.Create(textBox2.Text);
fs.Close();
Az írás előtt példányosítjuk a ResourceWriter osztályt.
rw = new ResourceWriter(textBox2.Text);
A kulcs-érték párok kiírása az AddResource metódussal történik, melynek két paraméterében adjuk meg azokat.
A művelet végén be kell zárnunk az objektumot.
A Form Olvasás füle alatt kiválaszhatunk egy kulcsot a ComboBox kontrolból, majd az állományból kiolvashatjuk a hozzá tartozó értéket.