ASP.NET ile ZIP ve unZIP Meselesi

0 dakikada yazıldı

6184 defa okundu

Düzenle

İster web siteleri programlarken ister windows programlarında çoğu zaman
bir ZIP dosyası oluşturmaya ihtiyaç duymuşsunuzdur. Ben genelde ZIP
dosyalarını web sitelerinde yedekleme işlemleri için veya kullanıcı
birden çok dosyayı siteden download edecekse hepsini birleştirip bir
dosya olarak verebilmek için kullanırım. Windows programlarında da
yedekleme işlemleri için veya Export ve İmport işlemlerinde dışarıyda
tek bir dosya vermek için kullanabiliriz. Genel olarak baktığımızda
internette bizi veri trafiğinden kurtaran ve derli doplu downloadlar
sağlayan bir araç gibi kullanılabilir ZIP dosyaları.

Esas mesele .NET kodumuz ile istediğimiz dosyaları ZIPleyip var olan ZIP
dosyalarını da açabilmek. Bu noktada bir sürü alternatif var, isterseniz
üçüncü parti componentler satın alabilirsiniz veya ücretsiz dağıtılan
bazı DLL kütüphanelerini de kullanabilirsiniz. Ama aslında bizim .NET
Framework dahilinde kullanabileceğimiz yapılar da mevcut.

Microsoft.VisualStudio.Zip.dll

"Böyle bir sınıftan haberim yoktu. Bu kadar kolay mıymış?" diyenler
üzülmesinler :) Haberinizin olmaması çok normal çünkü bu sınıf yapısına
Visual Studio içerisinde "Add Reference" dediğinizde gelen listede
karşılaşmanız mümkün değil. Aslında bu sınıf sadece Visual Studio
Content Installer ve Template Wizard ile kullanılmak üzere hazırlanmış.
O nedenle herhangi bir şekilde bu sınıfla ilgili Microsoft'dan destek
almanız da mümkün değil.

Yukarıda ismini yazmış olduğum DLL dosyasını kendiniz gidip GAC
(Global Assembly Cache)
içerisinden bularak almanız gerekecek. Bunun
için Start menüsünden Run diyerek
c:\windows\assembly\gac_msil\ yazabilir ve direk söz konusu
klasöre ulaşabilirsiniz. Benim bilgisayarımda tam yolu şu şekilde oldu:
C:\windows\assembly\gac_msil\Microsoft.VisualStudio.Zip\8.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Zip.dll

DLL dosyasını projenize kopyaladıktan sonra "Add Reference" bölümünde de
"Browse" diyerek DLL'i doğrudan projenize referans olarak
ekleyebilirsiniz.

Imports Microsoft.VisualStudio.Zip

Yukarıdaki şekilde DLL içerisindeki hedefimizi import ettikten sonra
aşağıdaki gibi basit bir kod ile ZIP dosyalarını diske açabiliyoruz.

        Dim Cozucu As New
Microsoft.VisualStudio.Zip.ZipFileDecompressor("C:\Benim\dosyam\burada.zip")

        Cozucu.UncompressToFolder("C:\Dosyaları\Buraya\Koy\")

\

Cozucu adını verdiğimiz bir değişkene ZipFileDecompressor
sınıfının bir kopyasını hedef ZIP dosyamızın tam yolunu da vererek
yarattıktan sonra UncompressToFolder metodu ile istediğimiz bir yere
tüm dosyaları açabiliyoruz. Şimdi sıra geldi ZIP dosyaları yaratmaya;

        Dim Dosyalar() As String
= System.IO.Directory.GetFiles("C:\Sıkıştıracağım\Dosyaların\Hepsi\burada\")

        'Dosyaların tam yol listesinin
bulunduğu dizide sadece dosya isimlerini bırakalım.

        For Sayac As Integer
= 0 To Dosyalar.GetUpperBound(0)

            Dosyalar(Sayac) =
System.IO.Path.GetFileName(Dosyalar(Sayac))

        Next

 

        Dim Sikistirici As New
ZipFileCompressor("C:\ZIP\Dosyam\Buraya.zip", "C:\Sikistirilacak\Dosyaların\Bulundugu\yer\Burası\",
Dosyalar, True, False)

\

Sıkıştırma işlemine başlamadan önce sıkıştıracağımız dosyaların bir
listesini String tipinde bir diziye almamız gerekiyor. O nedenle ilk
satırda System.IO.Directory.GetFiles sınıfını kullanarak
Dosyalar adındaki dizimize listeyi alıyoruz.
System.IO.Directory.GetFiles sınıfı dosyaların listesini geriye
dosyaların tam yolu ile döndürüyor. Biz dosyaların yol bilgisinin ZIP
dosyasına aktarılmasını istemediğimiz için dizideki her bir öğeyi
for döngüsü ile gezerek dosya isimlerini
System.IO.Path.GetFileName sınıfı ile ayıklıyoruz.

Sıra geldi sıkıştırma işlemini yapmaya. Sıkıştırma işlemi için
Sikistirici adında bir ZipFileCompressor yaratıyoruz. Esasen bu
değişken yaratma işlemini yaparken sıkıştırma işini de yapmış olacağız.
ZipFileCompressor tanımlarken verdiğimiz parametrelerden ilki
yaratılacak ZIP dosyasının adı ve tam yolu. İkinci parametre tüm
sıkıştırılacak dosyaların bulunduğu klasörün tam yolu, üçüncü parametre
ise dosyalarımızın adlarının bulunduğu dizinin ta kendisi. Son olarak
verdiğimiz iki parametreden ilki hedef konumda başka bir ZIP dosyası
varsa silinip silinmeyeceğini diğeri ise bir hata durumunda
sıkıştırmanın iptal edilip edilmeyeceğini belirliyor.