.NET kütüphanesi olan SharpZipLib ile dosya sıkıştırma veya çıkartma işlemini göreceğiz isterseniz tek bir klasörü belirtip içerisindeki diğer tüm alt klasördekileride sıkıştırabilir veya filtreleyerek sıkıştırabilirisiniz.
ASP.NET SharpZipLib ile dosyaları sıkıştırma
SharpZipLib kütüphanesinin özellikleri sadece özet kısımda belitildiği gibi değildir isterseniz örneklerle açıklamaya çalışalım örneklere başlamadan öncede SharpZipLib kütüphanesini buradan indirebilirsiniz. SharpZipLib kütüphanesini indirdikten sonra dll dosyanızı projenize Reference(Referans) olarak eklemeniz gerekmektedir. Referans olarak ekledikten sonra projenizde kütüphaneye ait sınıfları, metodları v.b nesneleri kullanmak için namespace kısmına alltaki satırı eklemelisiniz.
Namespace
1 | using ICSharpCode.SharpZipLib.Zip; |
Örnek 1
1 2 3 4 | FastZip zip = new FastZip(); bool recurse = true; string filter = @".png"; zip.CreateZip(Server.MapPath("~/image-files.zip"), Server.MapPath("~/Images/"), recurse, filter); |
Üstteki kodda FastZip
sınıfından örnek alarak bu sınıfa ait CreateZip
metoduyla zip dosyası oluşturuyoruz sırasıyla CreateZip
metodunun istediği parametreler şu şekilde ilk parametrede isterseniz oluşturulacak dosyayı fiziksel olarak diske bir isim belirterek kaydedebilir istersenizde ram’de Stream olarak tutabilir ve işlemlerinizde kullanabilirsiniz ben burada fiziksel olarak ana dizine image-files.zip
dosyası oluşturuyorum ikinci parametrede ise sıkıştırılacak dosyaların yer aldığı dizini belitriyoruz 3 parametrede ise alt dizinlerinde sıkıştırma işlemine tabi tutulup tutulmayacağı belitiliyor 4.parametrede ise sıkıştırma yapılırken filtreleme uygulanıp uygulanmayacağı belirtiliyor biz burada sadece .png
dosyalarının sıkıştırılacağını ve tüm alt klasörlerde arama yapılıp sıkıştırılacağınıda 3.parametreye true değeri vererek image-files.zip
dosyasını oluşturuyoruz.
Filterleme işleminde Regular Expression
kullanılmaktadır sizde kendi Regex
‘lerinini tanımlayarak sıkıştırılacak dosyalarınızı belirleyebilirsiniz vey filtreleme uygulanmayacak ise null değer girmelisiniz.
Diğer önemli bir nokta ise eğer üstteki kod’a ek olarak oluşturmak istediğiniz zipli dosyanın şifreli olarak indirilmesini istiyorsanız yapmanız gereken CreateZip metodundan önce alttaki kodu eklemelisiniz.
1 | zip.Password = "1234" |
Örnek 2
1 2 3 | FastZip zip = new FastZip(); string filter = null; zip.ExtractZip(Server.MapPath("~/image-files.zip"), Server.MapPath("~/NewFolder"), filter); |
Üstteki örneğimizde ExtractZip
ile oluşturmuş olduğumuz image-files.zip dosyasını şimdide NewFolder adlı dizine çıkartıcağız 3.paramtereyede ise çıkartma yapılırken filtreleme uygulanacakmı yani buna şöyle örnek verebiliriz zipli dosya içerisinde bir çok formatta dosya olabilir ama biz filtrelemeye üstteki örnekte olduğu gibi png olarak belirtirsek zipli dosya içerisinde sadece png formatındakileri çıkart demiş oluruz. eğere çıkartma işlemi yapılan dosya şifreli ise o zaman 1.örneğimizdeki gibi ExtractZip metodundan önce zip.Password özelliğinde şifre belirtilmelidir.