C# System Compression – Dosya sikistirma

 

Merhaba Arkadaslar bugun .NET Framework ‘ un System Compression konusunu anlaticam bazen verilerimizi sikistirmak ve istedigimiz formatta yazmak isteyebiliriz. herhan psikopatligimiz tutabilir peki ne yapmamiz gerekir sikistirma ve mantigi nedir bi bakalim..

Sikistirmanin aslinda kafamizi okadar yorucak bir olayi yok en basitinden düsünürsek "ANKARA" kelimesini ele alalim.. biri sunu bi sikistir bakayim derse naparsiniz bi düsünelim.. ben olsam.. tekrar eden harfleri sadece 1 kez yazmak isterdim yani ben "A" harfini basa bi yaziyim diger "A" harflerinin nerde hangi adresde oldugunuda bi kenara ilistiri verirdim tekrar gün isigina çikartmak istedigimde o adreslere bakarak "A" harfini nerden aldigima bakip tekrar yerine yerlestirirdim bu algoritmayla sikistirma islemi yaparsak sonuç olarak bize "ANKR" sonucu dönecektir neredeyse yari yariya ise yaradi ozaman.. tabi bu isin sadece mantik yönüydü winrar.. winzip gibi sikistirma programlarinin kullandiklari algoritmalar emin olun çok daha karmasik ve içinden çikilmaz bir algoritmaya sahip olduklari asikar.. hadi geçelim biz kendi yagimizda kendimize yetecek kadar sikistirma islemlerine bir bir..
Bu is için "System.IO.Compression" Kütüphanesini kullanicaz.. o yüzden bunu Usinglere eklememiz gerekli.. sikildim kodlara geçelim..

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.IO.Compression;

 

namespace SistemCompression

{

    public partial class Form1 : Form

     {

        public Form1()

        {

            InitializeComponent();

        }

 

        FileStream fsZiplenecek;

        public void Ziple(string dosyayolu)

        {

            //1-nereye kaydedilecek

            FileStream fsKaydedilecek = new FileStream("C:\ziplenmis.zippy", FileMode.OpenOrCreate, FileAccess.Write);

            //2- kim sikistirilacak

            fsZiplenecek = new FileStream(dosyayolu, FileMode.OpenOrCreate, FileAccess.Read);

            //3- sikistirilacak dosya byte[] sine cevrilmelidir.

            byte[] dosyaIcerik = new byte[fsZiplenecek.Length];

            fsZiplenecek.Read(dosyaIcerik, 0, dosyaIcerik.Length);

            //4- kim sikistirma eylemini gerceklestirecek.nesneyi belirken hangi amacla ulastiginizida soyleyin..

            DeflateStream ds = new DeflateStream(fsKaydedilecek, CompressionMode.Compress);

            ds.Write(dosyaIcerik, 0, dosyaIcerik.Length);

            ds.Close();

        }

 

        public void Cozumle(string CozulecekDosya)

        {

            //hangi dosya cozulecek

            FileStream fsCozulecek = new FileStream(CozulecekDosya, FileMode.OpenOrCreate, FileAccess.Read);

            //kim cozecek

            DeflateStream ds = new DeflateStream(fsCozulecek, CompressionMode.Decompress);

            //deflate stream bilgiyi nereye cozecek

            byte[] cozulmus = new byte[fsZiplenecek.Length];

            ds.Read(cozulmus, 0, cozulmus.Length);

 

            //artik sikistirilmis dosyamiz cozuldu ancak byte[] olarak duruyor.

            FileStream fsCozulmus = new FileStream("C:\cozulmus.txt", FileMode.OpenOrCreate);

            fsCozulmus.Write(cozulmus, 0, cozulmus.Length);

 

            fsCozulmus.Close(); ds.Close(); fsZiplenecek.Close();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

 

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

             Ziple("C:\deneme.txt");

            this.Text = "basarili";

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            Cozumle("C:\ziplenmis.zippy");

            this.Text = "basarili";

        }

     }

}


Ayrilma vakti geldi 🙂 ben Hakki ESER Türkiye saatiyle baska bir gün her hangi bir aksam C#.NET ile tekrar görüsme üzere saglicakla kalin efenim..
.

Projenin Kaynak kodlari için projeyi bilgisayariniza indirebilirsiniz.

 

5 thoughts on “C# System Compression – Dosya sikistirma

  1. FileStream fsKaydedilecek = new FileStream(“D:\ziplenmis.zippy”, FileMode.OpenOrCreate, FileAccess.Write);

    satyrdaky dosya uzantysynda hata alyyorum.Bu ve butun dosya yolu uzantylarynda dönus yapan olursa makaleyy takyp edyyorum tskler.

  2. Ziple("C:\deneme.txt"); // Metodunu çagirdigimiz zaman "C" sürücüsünün içerisinde deneme.txt olarak kaydeder..

    Cozumle("C:\ziplenmis.zippy"); // Metodunu çagirdigimizda ise yine "C" sürücüsünün içerisinde ziplenmis.zipp

  3. sikistirilacak ve sikistirilmis dosyalari nereye nasil kaydedecegiz? kodlari derleyince hata veriyorda.

Bir cevap yazın

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