Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C# – DotNetZip Kütüphanesi İle Dosya Sıkıştırma

Önceki yazılarımdan olan C# – System.IO.Packaging Kütüphanesi İle Dosya Sıkıştırma başlıklı yazımda System.IO.Packaging kütüphanesiyle dosya sıkıştırmayı incelemiştik.Yazımızı incelerseniz eğer, o yazımızla beraber üç farklı yöntemle dosya sıkıştırma işlemlerine değineceğimizi belirtmiştim.Bu yazımızda ikinci yöntemimiz DotNetZip kütüphanesi ile dosya sıkıştırmayı irdeleyeceğiz.

Öncelikle DotNetZip kütüphanesini isterseniz http://dotnetzip.codeplex.com/ linkinden, isterseniz de buradan .dll dosyası olarak indirebilirsiniz.
C# DotNetZip ile sıkıştırma 1

Yukarıdaki görüntüde gördüğünüz gibi indirdiğiniz dosyayı rardan çıkardıktan sonra, “zip-v1.9” -> “Debug” -> “Ionic.Zip.dll” kombinasyon dizisindeki .dll dosyası işimizi görecektir.

Bu dosyayı projemize entegre edebilmek için, projemize sağ tıklayarak “Add” -> “Reference” kombinasyonunu takip ediniz.
C# DotNetZip ile sıkıştırma 2

Karşımıza çıkan ekran aşağıdaki gibi olacaktır.
C# DotNetZip ile sıkıştırma 3
Bu pencerede “Browse” butonuna tıklayarak, yukarıda dizin yolunu belirttiğimiz .dll dosyasını seçip “Add” dememiz yeterli olacaktır.

C# DotNetZip ile sıkıştırma 4

Son olarak “Reference Manager” penceresine Check edilmiş bir vaziyette gelen “Ionic.Zip.dll” dosyasını göreceksiniz.”OK” butonuna tıklayıp “Ionic.Zip.dll” dosyasını projenize entegre işlemini sona erdiriniz.

Projemizin Solution görüntüsü aşağıdaki gibi olacaktır.

C# DotNetZip ile sıkıştırma 5

Gördüğünüz gibi temel dosyamızı projemize entegre etmiş olduk.Şimdi sıra geldi kodsal işlem yapmaya.
Yukarılarda bahsettiğim C# – System.IO.Packaging Kütüphanesi İle Dosya Sıkıştırma başlıklı yazımızda “ArchiveObj” ve “ArchiveCreator” isimli iki adet Base Class tanımlamıştık.Aynı şekilde bu Base Class’ları bu tekniğimizde de kullanacağız.

    public abstract class ArchiveObj
    {
        internal String strPath;
        internal List<String> lError;
        internal List<String> lFiles;
        public String[] ErrorList
        {
            get
            {
                return lError.ToArray();
            }
        }
        public ArchiveObj()
        {
            lFiles = new List<string>();
            lError = new List<string>();
        }
        public Boolean AddFile(String strFile)
        {
            lFiles.Add(strFile);
            return true;
        }
        public abstract int SaveArchive();
    }
public abstract class ArchiveCreator
{
    internal String strPath;
    public abstract ArchiveObj GetArchieve();
}

Şimdi bu Base Class’ları kullanarak sıkıştırma işlemini gerçekleştirecek C# kodlarımızı dökelim.

    class IonicZip : ArchiveObj
    {
        private IonicZip() { }
        public IonicZip(String sPath)
        {
            strPath = sPath;
        }
        public override int SaveArchive()
        {
            ZipFile zip = new ZipFile();
            foreach (String strFile in lFiles)
                zip.AddFile(strFile);
            zip.Save(strPath);
            return 1;
        }
    }
    public class IonicZipCreator : ArchiveCreator
    {
        private IonicZipCreator() { }
        public IonicZipCreator(String sPath)
        {
            strPath = sPath;
        }
        public override ArchiveObj GetArchieve()
        {
            return new IonicZip(strPath);
        }
    }

Artık sıkıştırma komutlarımızıda döktükten sonra bu oluşturduğumuz yapılar sayesinde basitce sıkıştırma işlemlerini halledebiliriz.

        private void Form1_Load(object sender, EventArgs e)
        {
            ArchiveCreator ss = new IonicZipCreator(@"D:\Deneme\arsiv.zip");
            ArchiveObj xx = ss.GetArchieve();
            xx.AddFile(@"D:\Deneme\a.txt");
            xx.AddFile(@"D:\Deneme\b.PNG");
            xx.AddFile(@"D:\Deneme\c.docx");
            xx.SaveArchive();
        }

Programı derleyip çalıştırdığınız zaman belirttiğiniz dosyalar, belirtilen dizinde istediğiniz isimle sıkıştırılarak eklenecektir.

Görsel olarak son hali koymaya lüzum görmüyorum.Bunun ispatını deneyerek yapmanızı tavsiye ederim, yukarılarda bahsettiğim konuyla alakalı ilk yazıda örneklendirmek için görsel hali yayınlamıştım.Hiç bir fark yok 🙂

Faydalanmanız dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. Yakup dedi ki:

    Teşekkürler..

Bir cevap yazın

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

*