C# İle Zip dosyası nasıl oluşturulur ?

By | Aralık 19, 2009

Merhabalar, zamanında sizlere söz verdiğim üzere artık c# üzerine de birşeyler yazmaya başlıyorum. Ancak amacım kimseye sıfırdan C# öğretmek değildir. Hali hazırda az çok C# bilgisi olan, .NET nedir ne değildir bilen kişilerdir hedef kitlem. Eğer siz de az çok C# biliyorsanız. Yazacaklarımı anlamanız çok çok rahat olacaktır sizin için. Yorumlarınızla sorular sorabilirsiniz. Elimden geldiğince yardımcı olmaya çalışırım.

Bu ilk yazımda her zaman karşınıza çıkmayacak olan bir senaryodan bahsedeceğim. Günü gelir ilerde bir projenizde bazı dosyaları zipleyip istemciye öyle vermeniz icab edebilir. Ya da yazacağınız kod belli aralıklarla bir takım dosyaları zipleyip yedekliyor ya da arşivliyor olabilir. İşte bu gibi durumlarda bu makale sizin hayatınızı kurtarabilir.

Benim bu zipleme olayına ihtiyaç duyduğum senaryo şu şekildeydi : Elimizde büyük bir domain database’i mevcuttu. Her bir domain adı belli kategorilere mensuptu. Benden istenen şey yazılacak bir kod ile database den bu domainleri okuyacağım, her kategori için bir klasör oluşturacağım ve bu klasör altında bir text dosyası içerisine o kategoriye mensup domainler yazdırılacak, ve sonra butun bunların hepsi tek bir zip dosyasında istemciye verilecek. Dolayısı ile istemci bu zip dosyasını açtığında karşısına her kategori için oluşturulmuş klasörleri görecek ve istediğinin içine girip , içindeki txt dosyasına tıklayarak o kategoriye bağlı olan domainleri görebilecek.

 

C# ile zip dosyası oluşturmak gerçekten çok kolay. Bunun için birkaç yöntem mevcut. Eğer Vs.Net programınızda J# programlama dil desteği ve onun kütüphaneleri kuruluysa. J# kütüphanelerini C# kodu içerisinde kullanarak zip dosyası elde etmeniz mümkün. Ancak benim bilgisayarımda J# yüklü olmadığı için bu fanteziye hiç girişmedim.

Yapmamız gereken http://www.codeplex.com/DotNetZip adresinden DotNetZip adlı dll dosyasını çekmektir. Bu dosyayı yuklediğinizde içinde Ionic.Utils.Zip.dll diye bir dosya göreceksiniz. Bu dosyayı projemizin referanslarına ekliyoruz.

Tabi ekledikten sonra namespace’lerimize de “using Ionic.Utils.Zip;” bloğunu eklemeyi unutmuyoruz.

 

Bu kütüphane içerisinde kullanacağımız sınıfın ismi “ZipFile“. Öncelikle bir adet ZipFile nesnesi örnekliyoruz :

ZipFile zip = new ZipFile();

Daha sonra “zip” nesnemizin içine dosyalarımızı atıyoruz. Bunun için AddFile() methodunu kullanıyoruz. Bu methodun iki kullanımı mevcut

zip.AddFile(“C:\\Belgelerim\\deneme.doc”); // Bu şekilde kullanıldığı zaman C:\\Belgelerim\\deneme.doc konumundaki dosyayı direkt zip dosyasının içine atar.

zip.Addfile(“C:\\Belgelerim\\deneme.doc”,”Kitaplar”); // Bu şekilde kullandığımız zaman ise oluşacak zip dosyasının içinde “Kitaplar” diye bir klasör oluşur. Ve deneme.doc onun için konulur.

Ekleyeceklerimizi ekledikten sonra zip dosyamızı oluşturmak için Save(); methodunu çağırmamız yeterli.

zip.Save(“C:\\yedeklerim\\isim.zip”); // C: nin altındaki yedeklerim adlı klasörün altında isim.zip adında bir zip dosyası olarak kayıt gerçekleşiyor. Ve işimiz bitiyor.

Şayet bir web sitesi için bunu düşünüyorsanız. ve kullanıcılara bir takım şeyleri zipli olarak download etmelerini istiyorsanız. Save() methoduna webden ulaşılabilir bir path veriniz. Ve zip dosyasını onun  altında oluşturunuz. Arkasından da dosyanın bulundugu klasöre Response.Redirect(); ile yönlendirme yapmanız yeterlidir.

Saygılar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir