2011-11-29 12 views
6

Bir projede SharpZipLib kullanıyorum ve bir zip dosyasına bakmak için kullanmanın mümkün olup olmadığını ve eğer içindeki dosyalardan birinin bir aralıkta bir veri modifiye edilmiş olup olmadığını merak ediyorum O dosyayı seçip yeni bir dizine kopyalamak için arıyorum. Bu kimliği bilen biri var mı?SharpZipLib Bir ZIP dosyasının içeriğini inceleyin ve seçin

+0

Mümkün olduğundan eminim. Arşivi açmanız ve dosya koleksiyonunun içeriğine bakmak zorunda kalacaksınız. Son değişiklik bilgilerinin yapılıp yapılmadığına bağlı olarak herkes, başka herşeyin mümkün olup olmayacağını belirler. Halka açıklanmamasının sebebi yok, SharpZibLib kütüphanesi buna izin veriyor, bu yüzden buna izin vermeli. Aksi halde, buna izin verecek başka çözümler de vardır. –

cevap

8

Evet, bir zip dosyasının dosyalarını SharpZipLib kullanarak numaralandırmak mümkündür. Dosyaları zip dosyasından da seçebilir ve bu dosyaları diskinizdeki bir dizine kopyalayabilirsiniz. I (daha fazla analiz için) hafızada ZipEntry depolamak için bir MemoryStream kullanımı Yukarıdaki örnekte

using (var fs = new FileStream(@"c:\temp\test.zip", FileMode.Open, FileAccess.Read)) 
{ 
    using (var zf = new ZipFile(fs)) 
    { 
    foreach (ZipEntry ze in zf) 
    { 
     if (ze.IsDirectory) 
     continue; 

     Console.Out.WriteLine(ze.Name);    

     using (Stream s = zf.GetInputStream(ze)) 
     { 
     byte[] buf = new byte[4096]; 
     // Analyze file in memory using MemoryStream. 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      StreamUtils.Copy(s, ms, buf); 
     } 
     // Uncomment the following lines to store the file 
     // on disk. 
     /*using (FileStream fs = File.Create(@"c:\temp\uncompress_" + ze.Name)) 
     { 
      StreamUtils.Copy(s, fs, buf); 
     }*/ 
     }    
    } 
    } 
} 

: Burada

küçük bir örnektir. Ayrıca diskte ZipEntry (belirli ölçütleri karşılarsa) depolayabilirsiniz.

Umut, bu yardımcı olur.

+0

Tam olarak aradığım şey bu, çok takdir! – DukeOfMarmalade