BizimForumdayiz > Bilişim ve Teknoloji > Yazılım > C# (Moderatörler: endless_gs1, AlwaysThink) > C# 2.0’da Zip Dosyalarını Açmak

Reklamlar
Sayfa: [1]   Aşağı git
  Yazdır  
Gönderen Konu: C# 2.0’da Zip Dosyalarını Açmak  (Okunma Sayısı 1153 defa)
30 Temmuz 2009, 22:36:57
SeLiM
HeLacKiMi
Administrator
*******

Teşekkür 349
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 5946


Herkes Burada Ya Sen???


WWW
« : 30 Temmuz 2009, 22:36:57 »

Uyarı :

Projenizde “System” ve “vjslib” referansları ekli olmalıdır.
Kod:
using System;

using java;

using java.util;

using java.util.zip;

using java.io;

 

namespace ModifyZip

{

    class Program

    {

        static void Main(string[] args)

        {

            ZipFile z = new ZipFile(@"C:\Yeni.zip");

            Enumeration e = z.entries();

 

            while (e.hasMoreElements())

            {

                ZipEntry ze = (ZipEntry)e.nextElement();

                if (ze.isDirectory())

                {

                    System.IO.Directory.CreateDirectory(@"C:\Temp\" + ze.getName());

                }

                else

                {

                   

                     if (!System.IO.Directory.Exists(@"C:\Temp\" + System.IO.Path.GetDirectoryName(ze.getName())))

                    {

                        System.IO.Directory.CreateDirectory(@"C:\Temp\" + System.IO.Path.GetDirectoryName(ze.getName()));

                    }

 

                    InputStream s = z.getInputStream(ze);

                    FileOutputStream fos = new FileOutputStream(@"C:\Temp\" + ze.getName());

                    int size;

                    sbyte[] data = new sbyte[1024];

                    while ((size = s.read(data, 0, data.Length)) > 0)

                    {

                        fos.write(data, 0, size);

                    }

                    fos.close();

                }

            }

        }

    }

}

 

 

 

Açıklama :

 

      Diyelim ki C: sürücümüzde “Yeni.Zip” adlı bir sıkıştırılmış dosya olsun. Bu dosyayı açıp içindeki dosyaları ayrıştırmak istediğimizde, Framework 2.0’ın “java” kütüphanesi bize yardımcı olur. Projemize “System” ve “vjslib” referanslarını ekler, uygun namespaceleri kod sayfamıza import ederiz.

 

Kod:
using System;

using java;

using java.util;

using java.util.zip;

using java.io;


 

 

      Bu zip dosyasını Framework’ün “java.util.zip.ZipFile” sınıfını kullanarak kolaylıkla açabiliriz. Bunun için öncelikli olarak ZipFile sınıfından Zipli dosyamın adını belirtecek biçimde bir değişken türetiriz.

 

       
Kod:
     ZipFile z = new ZipFile(@"C:\Yeni.zip");

 

 

 

      Bu zipli dosyanın içindeki her sıkıştırılmış bilgi, z değişkenin getEntries() metodunun enumerasyonları olacaktır.

 

Kod:
            Enumeration e = z.entries();

            while (e.hasMoreElements())

            {

                ZipEntry ze = (ZipEntry)e.nextElement();

                  ///

 

                  ///

            }

 

 

 

      Bu bilginin içeriğine göre bilginin bir klasör bilgisi mi ya da bir dosya bilgisi mi olduğunu analiz edebilirim. Burada ze.getName() metodundan dönen değer, gelen bilgi bir klasörse klasör adını bir dosya ise dosya adını söyler.

 

Kod:
            Enumeration e = z.entries();

            while (e.hasMoreElements())

            {

                ZipEntry ze = (ZipEntry)e.nextElement();

             

                  if (ze.isDirectory())

                {

                    System.IO.Directory.CreateDirectory(@"C:\Temp\" + ze.getName());

 

                }

                else

                {

                     if (! System.IO.Directory.Exists(@"C:\Temp\" + System.IO.Path.GetDirectoryName(ze.getName())))

                    {

                        System.IO.Directory.CreateDirectory(@"C:\Temp\" + System.IO.Path.GetDirectoryName(ze.getName()));

                    }

                  //

 

                  //

                }

            }       
       

 

 

 

      Zipli dosyamızı C: sürücüsünde Temp isimli bir klasörün altına açacak olsaydık, yukarıdaki rutin işimizi görürdü.

 

      Enumerasyondan dönen bilgi bir dosyanın bilgisiyse zipli dosyanın o entry’de ki bilgisini ayrıştırabiliriz.

 

                   
Kod:
InputStream s = z.getInputStream(ze);

 

 

 

      Bu bilgiyi fiziksel sürücüye yazarak işlemi tamamlarız. Bunun için FileOutputStream sınıfından bir değişken türetiriz ve ayrıştırdığımız bilgiyi diske kaydederiz.

 

                   
Kod:
FileOutputStream fos = new FileOutputStream(@"C:\Temp\" + ze.getName());

                    int size;

                    sbyte[] data = new sbyte[1024];

                    while ((size = s.read(data, 0, data.Length)) > 0)

                    {

                        fos.write(data, 0, size);

                    }

                    fos.close();

 

 

 

      Programın çalışmasından sonra “Temp“ klasörüne bakıldığında zipli dosyadan ayrışan dosyalar görülür.

 

Başka bir makalede görüşmek üzere .

 

Hasan Altıntaş
Alıntıdır... Hasan Altıntaş
Logged
30 Temmuz 2009, 22:44:15
Ŧi८օ
f i c o
Genel Moderatör
*****

Teşekkür 558
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 13735


ςǿκ کε√díκ طę ∂طí !


WWW
« Yanıtla #1 : 30 Temmuz 2009, 22:44:15 »

emeğe  saygı durumu  Grin Alkış
Logged

Sayfa: [1]   Yukarı git
  Yazdır  
 
Gitmek istediğiniz yer:  

Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC
Rengli Theme By Helackimi & Forum
MySQL ile Güçlendirildi PHP ile Güçlendirildi XHTML 1.0 Geçerli! CSS Geçerli!
Bu Sayfa 1.321 Saniyede 25 Sorgu ile Oluşturuldu