Üye Kayıt Üye Giriş

C# System Compression - Dosya sıkıştırma


C# System Compression - Dosya sıkıştırma

 

Merhaba Arkadaşlar bugun .NET Framework ' un System Compression konusunu anlatıcam bazen verilerimizi sıkıştırmak ve istediğimiz formatta yazmak isteyebiliriz. herhan psikopatlığımız tutabilir peki ne yapmamız gerekir sıkıştırma ve mantığı nedir bi bakalım..

Sıkıştırmanın aslında kafamızı okadar yorucak bir olayı yok en basitinden düşünürsek "ANKARA" kelimesini ele alalım.. biri şunu bi sıkıştır bakayım derse naparsınız bi düşünelim.. ben olsam.. tekrar eden harfleri sadece 1 kez yazmak isterdim yani ben "A" harfini başa bi yazıyım diğer "A" harflerinin nerde hangi adresde olduğunuda bi kenara iliştiri verirdim tekrar gün ışığına çıkartmak istediğimde o adreslere bakarak "A" harfini nerden aldığıma bakıp tekrar yerine yerleştirirdim bu algoritmayla sıkıştırma işlemi yaparsak sonuç olarak bize "ANKR" sonucu dönecektir neredeyse yarı yarıya işe yaradı ozaman.. tabi bu işin sadece mantık yönüydü winrar.. winzip gibi sıkıştırma programlarının kullandıkları algoritmalar emin olun çok daha karmaşık ve içinden çıkılmaz bir algoritmaya sahip oldukları aşikar.. hadi geçelim biz kendi yağımızda kendimize yetecek kadar sıkıştırma işlemlerine bir bir..


Bu iş için "System.IO.Compression" Kütüphanesini kullanıcaz.. o yüzden bunu Usinglere eklememiz gerekli.. sıkıldım 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 sıkıstırılacak

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

            //3- sıkıstırılacak dosya byte[] sine cevrilmelidir.

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

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

            //4- kim sıkıstırma eylemini gerceklestirecek.nesneyi belirken hangi amacla ulastıgınızıda 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);

 

            //artık sıkıstırılmıs dosyamız 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 = "basarılı";

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

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

            this.Text = "basarılı";

        }

     }

}

 


Ayrılma vakti geldi :) ben Hakkı ESER Türkiye saatiyle başka bir gün her hangi bir akşam C#.NET ile tekrar görüşme üzere sağlıcakla kalın efenim..


Projenin Kaynak kodları için projeyi bilgisayarınıza indirebilirsiniz.

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER