Turkish Tutorial of SharpZipLib C#
utopian-io·@pars11·
0.000 HBDTurkish Tutorial of SharpZipLib C#
<hr> > **SharpZipLib** SharpZipLib (#ziplib, formerly NZipLib) is a compression library for Zip, GZip, BZip2, and Tar written entirely in C# for .NET. It is implemented as an assembly (installable in the GAC), and thus can easily be incorporated into other projects (in any .NET language) [Source](https://www.nuget.org/packages/SharpZipLib/1.0.0-alpha2) <hr> <center> <div>Icons made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a></div></center> <hr> Merhaba arkadaşlar bugün bir .NET kütüphanesi olan SharpZipLib' i tanıtmaya ve örnek bir C# uygulaması yapmaya çalışacağım. SharpZipLib kullanarak dosyalarımızı Zip olarak sıkıştırabiliriz. Zip sıkıştırılmış bir dosya biçimidir. Dosyaların sıkıştırılması boyutlarının küçülmesini sağlar. Daha hızlı indirmenizi ve daha fazla depolama alanı sağlamak için veya dosyalarımı dışarı aktarmak için dosyalarımı Zip arşivine dönüştürürüz. Bugun C# ile SharpZipLib kütüphanesini kullanarak. Dosyalarımızı sıkıştıracağız. <hr> [SharpZipLib Website](http://icsharpcode.github.io/SharpZipLib/) [NuGet](https://www.nuget.org/packages/SharpZipLib/1.0.0-alpha2) [GitHub](https://github.com/icsharpcode/SharpZipLib) [Proje Dosyamız](https://drive.google.com/file/d/1crur2DFMMVExATVh7s1_3y0SJREYOl1e/view?usp=sharing) <hr> ## SharpZipLib C# Projemiz Öncelikle arkadaşlar Visual Studio üzerinden bir Form Application projesi oluşturuyoruz. Ben Form Application oluşturmak istedim siz başka bir proje çeşidide seçebilirsiniz ihtiyacınıza göre SharpZipLib bütün .NET dillerinde ve projelerinde kullanabilirsiniz.  Projemizi oluşturduktan sonra projemize SharpZipLib kütüphanesini eklememiz için NuGet linkindeki kodumuzu NuGet Package Manager Console'a yazmamız yeterli. Kodumuz: <hr> ```Install-Package SharpZipLib -Version 1.0.0-alpha2``` ```Bu işlemi detaylı açıkladığım konuma buradan ulaşabilirsiniz.``` [Turkish Tutorial of NuGet Package Manager C#](https://utopian.io/utopian-io/@pars11/turkish-tutorial-of-nuget-package-manager-c) <hr>  Kütüphanemiz projemize başarıyla eklendi. Kütüphanemizi kodumuzda kullanabilmek için formumuzun kod alanına girip. SharpZipLib kütüphanemizin using kodunu ekliyoruz. Kodlarımız: <hr> ```using System.IO;``` ```using ICSharpCode.SharpZipLib``` <hr> System.IO dosyalarımız üzerinde işlem yapabilmemizi sağlayacak. Diğer kodumuz ise kütüphanemizin kodu.  Kütüphanemizi eklememizde bittiğine göre formumuzun tasarımına geçebiliriz. Ben klasörü zipleme ve ziplenmiş dosyayı açma işlemi yapmak istiyorum. Bu yüzden formuma iki adet label iki adet textbox iki adet button ekleyeceğim.  Formumuzun adını labellarımızın ve butonlarımızın textini tasarım için değiştiriyoruz.  Tasarım kısmımız tamamlandı kodlarımıza geri dönüyoruz. <hr> Öncelikle Zipleme yapabilmek için en üste using kısmımıza kütüphanemizin ```using ICSharpCode.SharpZipLib.Zip;``` kodunu ekliyoruz. Ve Zip'den çıkarma işlemi yapabilmek için yine en üste using kısmımıza kütüphanemizin ```using ICSharpCode.SharpZipLib.Core;``` kodunu ekliyoruz. Şimdi bunlarıda hallettiğimize göre iki fonksiyon yazağız biri klasörlerimizi dosyalarımızı ziplemek için diğeride zipli dosyalarımızı klasöre çıkartmak için. İlk Fonksiyonumuz dosya sıkıştırma şu şekilde olacak: <hr> ``` private void compressDirectory(string DirectoryPath, string OutputFilePath, int CompressionLevel = 9) { //Seçtiğimiz yoldaki dosyaları çekiyoruz. string[] filenames = Directory.GetFiles(DirectoryPath); // Zip'in çıkartılacağı yer için bir ZipOutputStream nesnesi oluşturuyoruz. using (ZipOutputStream OutputStream = new ZipOutputStream(File.Create(OutputFilePath))) { // Sıkıştırma levelini belirliyoruz 0-9 arası bir değer verebilir. // Biz yukarda bu sayıyı 9 girdik en iyi biçimde sıkıştırma yapılacak yani. OutputStream.SetLevel(CompressionLevel); byte[] buffer = new byte[4096]; foreach (string file in filenames) { //Zip dosyamıza dosyalarımızı ekliyoruz. ZipEntry entry = new ZipEntry(Path.GetFileName(file)); //Zip'e yazılan dosyaların yazma tarihini şuan olarak belirliyoruz. entry.DateTime = DateTime.Now; OutputStream.PutNextEntry(entry); using (FileStream fs = File.OpenRead(file)) { int sourceBytes; do { sourceBytes = fs.Read(buffer, 0, buffer.Length); OutputStream.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } // ZipOutputStream işlemimizi bitiriyoruz. OutputStream.Finish(); // ZipOutputStream işlemimizi kapatıyoruz. OutputStream.Close(); } } ``` <hr> Şimdi ikinci fonksiyonumuz zip açmaya geçebiliriz oda şu şekilde: <hr> ``` public void ExtractZipContent(string FileZipPath, string OutputFolder) { ZipFile file = null; FileStream fs = File.OpenRead(FileZipPath); file = new ZipFile(fs); foreach (ZipEntry zipEntry in file) { if (!zipEntry.IsFile) { //Dosyaları geç continue; } //Dosya adımızı zip adımıza eşitliyoruz. string entryFileName = zipEntry.Name; byte[] buffer = new byte[4096]; Stream zipStream = file.GetInputStream(zipEntry); string fullZipToPath = Path.Combine(OutputFolder, entryFileName); string directoryName = Path.GetDirectoryName(fullZipToPath); if (directoryName.Length > 0) { Directory.CreateDirectory(directoryName); } using (FileStream streamWriter = File.Create(fullZipToPath)) { StreamUtils.Copy(zipStream, streamWriter, buffer); } } } ``` <hr> Fonksiyonlarımız tamamlandı dosya sıkıştırmak ve sıkıştırılmış dosyayı açmak için fonksiyonlarımız hazır. Şimdi butonlarımızın kodlarını yazmamız gerekiyor. Button 1 yani zipleme yapmak için kullanacağımız butonumuzun kodları: <hr> ``` private void button1_Click(object sender, EventArgs e) { //FolderBrowserDialog nesnenimizi oluşturuyoruz. FolderBrowserDialog folder = new FolderBrowserDialog(); //Klasör seçme menümüzü açtırıyoruz. folder.ShowDialog(); string folderpath; //Dosya çıktısı yolumuzu masaüstüne ayarlıyoruz. string OutputFilePath = "C:\\Users\\gffdg\\Desktop"; //Klasör yolumuzu seçtiğimiz yola ayarlıyoruz. folderpath = folder.SelectedPath; //Textbox1 in textini klasör yolumuz yapıyoruz. textBox1.Text = folderpath; //Zipleme fonksiyonumuzu kullanarak. //Dosyamızın masaüstünde ziplenmiş halini oluşturuyoruz. compressDirectory(folderpath, OutputFilePath); } ``` <hr> Button 2 yani ziplenmiş dosyamızı açmak için kullanacağımız butonumuzun kodları: <hr> ``` private void button2_Click(object sender, EventArgs e) { //FolderBrowserDialog nesnenimizi oluşturuyoruz. FolderBrowserDialog folder = new FolderBrowserDialog(); //Klasör seçme menümüzü açtırıyoruz. folder.ShowDialog(); string folderpath; //Dosya çıktısı yolumuzu masaüstüne ayarlıyoruz. string OutputFilePath = "C:\\Users\\gffdg\\Desktop"; //Klasör yolumuzu seçtiğimiz yola ayarlıyoruz. folderpath = folder.SelectedPath; //Textbox1 in textini klasör yolumuz yapıyoruz. textBox1.Text = folderpath; //Zipten çıkarma fonksiyonumuzu kullanarak. //Dosyamızın masaüstünde ziplenmiş halini oluşturuyoruz. ExtractZipContent(folderpath, OutputFilePath); } ``` <hr> ## Programımızın Ekran Görüntüleri    Okuduğunuz için teşekkürler. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@pars11/turkish-tutorial-of-sharpziplib-c">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>