C# ile Dosya Parçalama ve Birleştirme

Ağustos 17, 2011

İstediğimiz uzantıda dosyayı byte dizine çevirerek eşit parçalara bölüp daha sonra istediğimiz zaman bu parçaları tekrar birleştirebiliriz.Örnegin şöyle bir senaryo düşünün elinizde bir tane 4 gb iso formatında veri var sizinde bu dosyayı başka bilgisayara taşımanız gerekmektedir ama sizde 4 gb flash bellek veya dvd yoksa bu işlemi nasıl yapabilirsiniz ? işte yapacagımız program bu gibi elimizdeki veriyi istediğimiz kadar parçaya ayırmaya ve aynı parçaları sonradan birleştirmeye yarayacak.Programı yaptıkca daha iyi anlaşılacaktır.Şimdi bir tane win app. uygulaması oluşturalım ve kodlamaya başlayalım ilk olarak gerekli olan sınıflarımızı using kısmına ekleyerek başlıyoruz.

 

 

 

 

Uygulamamın ismi parcala  ve sınıflarımızı using kısmına ekledik.Form tasarımınıda şu şekilde yapalım.

 

 

Programımız 2 kısımdan oluşacağı için tab kontrolü kullanarak 2 tane kısma ayıralım.Parçala kısmında bilgisayarımızdan seçtiğimiz herhangi bir dosyayı istediğimiz sayı kadar parçalayalım.Birleştir tab ‘ ımız da şu şekilde olacaktır.

 

 

İlk olarak global değişkenlerimizi tanımlayalım.

 

 

Programın ilerleyen kısımlarında bir çok yerinde aynı nesneleri kullanacağımız için global olarak tanımlıyoruz.Şimdi Parçala kısmımızdaki bilgisayardan dosya şeçme kısmını hazırlayalım.Dosya butonunun arkasına yazıyoruz kodlarımızı.

 

 

Global olarak tanımladığımız op değişkenimizi ShowDialog diyerek kullanıcının bilgisayarından bir dosya seçmesini istiyoruz ve o seçtiği dosyaya FileName diyerek ulaşıyoruz.Dosya kontrolü yaptıktan sonra  textBox’ımıza dosya ismini yazdırıyoruz ve bu dosya hakkında bilgi alabilmek için FileInfo nesnemizden yararlanıyoruz ki ekranda gereken yerlere dosyayla ilgili olarak bilgilerimizi getirebilelim mb ve oluşturulma tarihini ekrandaki label ‘ lere yazdırıyoruz.comboBox nesnemizin Items özelliğine parçalayacağımız kadar sayıları giriyoruz.

 

 

Bu şekilde istediğimiz kadar değer giriyoruz.Bu değerleri part sayısı olarak kullanacağız.Kullanıcının dosya seçmesini sağladık ve part sayımızada ayarladıktan sonra seçilen dosyayı parçalayabiliriz.Şimdi parçalama işlemimizi yapalım.

 

 

İlk olarak parçalayacağımız dosyaları nereye kaydedelim diye kullanıcıya soruyoruz eğer dosya adı boş ise mesaj verdiriyoruz.Daha sonra seçilen dosyayı parçalayabilmek için kesinlikle ihtiyacımız olan part sayısı ve dosya yolu kısımları için gerekli kontrollerimizi yapıyoruz kullnaıcı bunlardan birini boş geçerse mesaj verdiriyoruz.Tüm bilgiler doğru girilip devam edildi ise işlemin zamanını ölçebilmek için Stopwatch ‘ dan yararlanıyoruz ve uygulamamızın bu işlemi ne kadar sn ‘ de yaptığını buluyoruz. comboBox ‘ tan seçtiğimiz kadar part sayısı olacağı için dosyaların uzantısının sonuna sayi değişkenimizi yazdırıyoruz bunun  sebebi dosyaları birleştirmeye çalıştığımız zaman sıralı bir şekilde alabilmemiz. FileStream ile dosyayı okuyup reader değişkenimize aktarıyoruz daha sonra bu reader değişkenimizin uzunluğu kadar while döngüsüne sokuyoruz ama p değişkenimizi comboBox ‘ tan gelen part sayısına göre ayarladğımız için döngü bizim comboBox nesnemizden seçtiğimiz kadar dönüyor ve her dönüşte hakkı kadar reader ‘ i dosyaya yazıyor ve kaydediyor tabi uzantısının sonuna sayi değişkenimizi koyarak.Örn :  seçtiğimiz dosyanın uzantısı exe ise parçalanan dosyalarımızın uzantıları .exe1 , .exe2 , .exe3  gibi olacaktır daha sonra bunuda birleştirme işlemi sırasında hem birleştireceğimiz dosya uzantısını anlamak için hemde sıralamayı doğru yapabilmek için kullanıcaz. FileStream yardımı ile okuyup reader değişkenimize aktardığımız dosyayı byte dizisine dönüştürdükten sonra part sayısı kadar eşit parçaya bölüp yazdırıyoruz ve bu dosyayı kaydediyoruz.Döngünün sonunda  sw değişkenimizi durduruyoruz ve bu değişkenimizin Elapsed özelliğinden uygulamanın bu işlemi ne kadar sürede yaptığını buluyoruz ve ekrana yazdırıyoruz bu arada herhangi bir yerde hata oluşursa try – catch blogu ile bu hatayı yakalıyoruz ve mesaj verdiriyoruz.Hata oluşmazsa İşlem tamamlandı diye kullanıcıyı bilgilendiriyoruz.Seçtiğimiz dosyayı istediğimiz yere seçtiğimiz part sayısı kadar kaydettik.

 

 

Arkadaşlar bu şekilde 110 mb ‘ lık dosyayı 2 parça hale getirmesi 1 sn sürdü.Şimdi parçaladığımız bu dosyaları birleştirmeyide yapalım Birleştir kısmına geçiyoruz ve Dosya butonumuzun arkasına gerekli kodları yazalım.

 

 

Burada sadece kullanıcıdan hangi dosyayı birleştirmek istediğini öğreniyoruz burada önemli olan kullanıcının 1 numaralı parçalanmış dosyayı seçmesi lazım.

 

 

İlk olarak kullanıcının seçtiği dosyanın yolunu textBox2 den alıyoruz ve uzantımızı buluyoruz ve daha öncede belirttiğim gibi  dosya sıralamalarınıda bu yolla algılıyoruz.FileStream yardımı ile kullanıcının seçtiği dosyayı okuyoruz ve writer değişkenimize aktarıyoruz daha sonra while döngüsü içinde seçtiğimiz bu dosyayı ve diğer partlarını okuyarak byte dizisine aktarıp birleştiriyoruz ve en son tüm birleştirdiğimiz byte dizisini bilgisayarımızı yazdırıyoruz kullanıcı parçalanmış dosyayı nereden seçti ise yine birleştirdiğimiz dosyayıda oraya kaydediyoruz while döngüsü içerisinde part sayımızı 1 artırarak her seferinde diğer partı alıp okuyup byte dizimize aktararıyoruz.

 

 

 

Kaynak Dosyaları Buradan İndirebilirsiniz

 

 

 

 

 

posted in C# by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org