C# - A FileSystemObject objektum további lehetőségei

Windows Script Host lehetőségei 6. rész

forráskód letöltése
Cikksorozatunk ezt megelőző számában megismerkedhettünk a FileSystemObject mappák, és fájlok létrehozásával, illetve törlésével kapcsolatos metódusaival. Mostani cikkünkben bemutatjuk azokat a property-ket és metódusokat, melyekkel információkat kaphatunk egy adott mappáról, vagy állományról. Továbbá megismerhetünk egy objektumot, melynek segítségével egyszerűen listázhatjuk egy adott mappa állományait, valamint alkönyvtárait.
Állománylista
A program Form-ján a felső szegmensben találhatunk egy szerkesztőmezőt, melyben meg kell adnunk egy létező mappáját fájlrendszerünknek. A FÁJLLISTA gomb megnyomásával a gomb mellett elhelyezett ListBox kontrolban látható lesz a mappában található állományok listája. Miközben a ListBox kontrolban megjelennek az állománynevek, egy információs állomány is létrejön az alkalmazás mappájában INFOFILE.TXT néven. Az információs állományban az adott mappa állományainak listája látható, valamint egy méretadat, mely a mappában található állományok együttes méretét adja meg kB-ban.
Ezt a feladatot a mellékelt Wsh06.wsf parancsállomány, „filelist” azonosítóval rendelkező JOB-jával végezzük el.
A parancsállományban használni fogjuk az Enumerator objektumot, mellyel egy tetszőleges kollekció elemeit kaphatjuk meg. A következőképpen hozhatjuk létre:
enumObj = new Enumerator([kollekció]);
Kollekcióként olyan gyűjtemények adhatók meg, melyek elemeihez nem férhetünk hozzá indexek segítségével, vagyis eltérnek a tömb-felépítésű objektumoktól. Az Enumerator objektumot egy FOR ciklusban fogjuk használni, ahol láthatjuk metódusait működés közben.
A script elején megalkotjuk az argumentumokat tároló, és a fájlrendszer elérését lehetővé tevő objektumokat:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var args = WScript.Arguments;
Létrehozzuk az információs állományt úgy, hogy a létező állomány tartalmát felülírja:
infoFile = fso.CreateTextFile("infofile.txt", -1);
Létrehozzuk az argumentumként kapott mappanévből a könyvtárobjektumot, melynek állományait listázzuk:
folder = fso.GetFolder(args(0));
Példányosítunk egy Enumerator nevezetű objektumot, melynek segítségével egy ciklusban végigmehetünk a mappa állományain:
e = new Enumerator(folder.files);
Látható, hogy a paraméterként kapott kollekció az adott mappa fájllistája, melyekhez indexekkel nem férhetünk hozzá. A FOR ciklusban megadjuk kilépési feltételként a lista utolsó elemének elérését. Ezt az Enumerator objektum atEnd metódusa adja vissza. A moveNext metódussal léphetünk a következő elemre:
for (; !e.atEnd(); e.moveNext())
{
  file = e.item();
  infoFile.WriteLine(file.Name);         
  total = total + file.size;
}
A mappa egy-egy állományát az Enumerator objektum item metódusával kaphatjuk meg. A metódus úgy működik, hogy ha a kollekció üres, vagy az adott elem nem definiált, akkor az érték UNDEFINED lesz.
Az állományok méretadatait a size property-vel kaphatjuk meg. Az elkészült információs állományt rögtön megnézhetjük a Notepad programmal.
Tulajdonságlista
Az INFORMÁCIÓ gombbal elindíthatjuk ismét a mellékelt parancsállományt, melynek „info” azonosítóval bíró JOB-bal egy XML állományt hozhatunk létre a ListBox kontrolban kiválasztott állományról. Az XML állományban (infofile.xml) kigyűjtjük a fájllal kapcsolatos valamennyi lekérdezhető tulajdonságot. A property-k természetesen a FileSystemObject objektum property-jei. A program Form-ján a BETÖLTÉS gombra kattintva megjeleníthetjük az XML állomány tartalmát a táblázatban.
Állomány másolása
A program harmadik funkciójával kipróbálhatjuk, hogyan másolhatjuk az állományokat a mappák között. A „copy” azonosítóval rendelkező JOB-ban valósítottuk meg ezt a funkciót. A ListBox kontrolban a kiválasztott elem nevére kell kattintanunk a jobb egérgombbal, majd a MÁSOL menüpont megnyomásakor megjelenő modális ablakban meg kell adnunk a célmappát, ahová a kiválasztott állományt másolni szeretnénk. A parancsállományban található kód a következő:
Megalkotjuk az objektumokat:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var args = WScript.Arguments;
Majd a FileSystemObject objektum Copy metódusával átmásoljuk az elemet a célhelyre:
fso.CopyFile(args(0),args(1),true);
A metódus első paraméterében kell megadnunk a forrás állományt elérési úttal, a második paraméterben a célmappát. A harmadik logikai paraméterben jelezhetjük, hogy létező állomány esetén mit tegyen a feldolgozó. TRUE esetén felülírja a régi állományt az újjal, FALSE esetén nem.

Windows Script Host lehetőségei cikksorozat