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.