C# - Állományok tömörítése

Fájltömörítés 1. rész

forráskód letöltése
Az állományok tömörítése nemcsak a merevlemez helykihasználása szempontjából fontos, egyre nagyobb szerepe van az állományok hálózaton történő mozgatásában is. Első látásra úgy tűnhet, hogy a .NET osztályai között nem találunk olyat, melynek segítségével állományokat tömöríthetünk, illetve csomagolhatunk ki. Ennek ellenére nem kell lemondanunk a lehetőségről, mivel a funkció beépíthető alkalmazásainkba. Kétrészes sorozatunkban azt vizsgáljuk meg, hogy milyen módon érhetjük el ezt.
A mellékelt példa használata előtt – amennyiben a számítógépen még nem elérhető – telepítenünk kell a Microsoft J# futtatórendszert. Ennek módjáról a Bevezetés című szakaszban olvashat.
Bevezetés
A cikkünkben használt módszer a ZIP tömörítésre épül, melynek szabványa hozzáférhető, így az alkalmazások tetszőlegesen beépíthetik a .zip állományok manipulálásának lehetőségét.
Amennyiben C#-ban szeretnénk használni a ZIP tömörítés előnyeit, gondoskodnunk kell arról, hogy – mivel a .NET Framework nem kínál osztályokat a tömörítéshez – a Microsoft J# futtatórendszerre van szükségünk, melyben már elérhetők olyan névterek és osztályok, melyekkel tetszőleges módon tömöríthetjük állományainkat.
A cikk írásakor a J# futtatórendszer a következő címen volt elérhető: http://msdn.microsoft.com/vjsharp/downloads/howtoget.as. A futtatórendszert egy VJSharpRDPSetup.exe nevű állományba csomagolva tölthetjük le, melynek indítása után az automatikusan a Windows mappájában helyezi el a névtereket tartalmazó DLL-eket, assembly-ket. A kicsomagolt DLL-ek alapértelmezett esetben a <winroot>:\\Windows\Microsoft Visual JSharp .NET\Framework\v1.0.4205 mappába kerülnek.
A java.util és a java.util.zip névterek tartalmazzák a csomagoláshoz szükséges osztályokat. A névterek deklarációja a VJSLIB.DLL állományban található, így a projekthez referenciaként a DLL-t kell megadni.
Alkalmazás
A referencia hozzáadásához a projekt gyorsmenüjében az Add reference menüpontban kell kattintani, majd a felbukkanó ablakban a Browse nyomógombra kattintva meg kell keresni a DLL-t, a J# futtatórendszer állományait tartalmazó mappában.
A példában a ZipClass.cs állomány tartalmazza a csomagolást végző metódusokat.
A Form két füllel rendelkezik. A Tömörítés fül alatt egy listába gyűjthetjük a merevlemezről azokat az állományokat, melyeket a megadott néven be szeretnénk tömöríteni. A Tömörítés gombbal indítható a művelet, melynek eredménye egy tömörített állomány a projekt mappájában, neve pedig a megadott név. Az állományban megtalálhatjuk a tömörített alkotókat.
A művelet elvégzéséhez a ZipClass osztály ZipFiles metódusát hívjuk meg, melynek paraméterként az új tömörített állomány nevét kell átadnunk, valamint egy karakterlánc-tömbben a tömörítendő állományok neveit.
ZipClass.ZipFiles(Application.StartupPath + "\\" + textBox1.Text,files);
A Kicsomagol feliratú fül alatt a merevlemez egy tetszőleges, tömörített (a példában .zip kiterjesztésű) állományát tudjuk kicsomagolni a megadott mappába. Ehhez a ZipClass ExtractZipFile metódusát hívjuk meg, átadva a tömörített állomány és a célmappa nevét.
ZipClass.ExtractZipFile(textBox2.Text,textBox3.Text);
A tömörítéskor létrehozunk egy ZipOutputStream objektumot, mely a kimeneti, tömörített adatfolyam objektuma. Minden egyes tömörítendő fájlnévvel létrehozunk egy ZipEntry objektumot, mely a tömörített állomány egy eleme lesz. Majd ezeket a ZipEntry objektumokat a kimeneti adatfolyamba másoljuk.
A kicsomagolás műveletében a tömörített állomány minden ZipEntry objektumát egyenként lekérdezzük, a getName metódusával megtudjuk a nevét, majd ezzel a névvel létrehozunk egy fizikai állományt a merevlemez megadott mappájában. Amennyiben a mappa nem létezik, a programunk létrehozza azt.
A kicsomagolandó állomány elemeinek neveit a ZipClass osztály GetZippedFiles metódusával kérdezzük le, és a kapott listát a ListBox kontrolban helyezzük el. A metódus a kicsomagolandó állomány nevét várja paraméterként.

Fájltömörítés cikksorozat

Állományok tömörítése - Fájltömörítés 1. rész

Egyéb tömörtési lehetőségek - Fájltömörítés 2. rész