2014-12-22 18 views
9

Bellek Akış C# olarak iyonik Zip Oku giriş dosya adına göre girişler. Bunu nasıl yapabilirim? Ben bu yöntemle bellek akışı zipfile ayıklamak için Ionic.Zip kullanıyorum

aşağıda koduyla arayarak çalıştım ama dediğim ZipFile.Read(ms) üzerinde hata alıyorum:

Stream ms = GetReplayZipMemoryStream(); 
using (ZipFile zip = ZipFile.Read(ms)) 
{ 
    ZipEntry imageEntry = zip.Entries.First(x => x.FileName.EndsWith(".png")); 
    using (Stream s = imageEntry.OpenReader()) 
    { 
     var image = Image.FromStream(s); 
     pictureBox1.Image = image; 
    } 
} 

için şimdiden teşekkür ederiz sıkıştırılmış bir dosya olarak o okunamıyor yardım et!

+5

gibi koleksiyonları ve dosya adları bayt gibi dosyaları almak için bir şey yaptım gelmiş (mem akışında) artık sıkıştırılmamış ... Birleştirilmiş sıkıştırılmamış dosyaları bir dizi var. –

+0

Henk Holterman'ın önerdiği gibi, iç içe geçmiş zip dosyaları ile uğraşmadıkça, dosyaları ikinci snippet'te bir kez daha çıkarmanız gerekmez. Unzip etmeye çalıştığınız dosyaların örnek bir yapısını sağlayabilir misiniz? Alternatif olarak, tüm filtrelemeyi ilk döngüde yapmanızı ve belki de okumak istediğiniz tüm dosyaları tek bir akışa yazmamak için görüntüyü oluşturmanızı öneririm. –

+2

Henk'in gözlemine ek olarak, bunu yapmak için Ionic.Zip kullanmamayı tavsiye edeceğim. .NET, .zip dosyalarını işlemek için yerleşik işlevler sağlayan ve şimdi sahip olduğunuz koddan daha uygun olan IMHO olan "ZipArchive" sınıfına sahiptir. –

cevap

0

@HenkHolerman haklı, artık o anda bir zip dosyası yok. Zip dosyasının içeriğini geçici bir dizine ayıklamak ve daha sonra görüntü dosyalarını dosya sistemi üzerinden kullanmak isteyebilirsiniz.

11

Bu biraz eski soruyu ve geç cevap olabilir ama .Extract() `` verileri yaptıktan sonra bu

public static Dictionary<string, byte[]> Decompress(Stream targFileStream) 
{ 
    Dictionary<string, byte[]> files = new Dictionary<string, byte[]>(); 

    using(ZipFile z = ZipFile.Read(targFileStream)) 
    { 
     foreach (ZipEntry zEntry in z) 
     { 
      MemoryStream tempS = new MemoryStream(); 
      zEntry.Extract(tempS); 

      files.Add(zEntry.FileName, tempS.ToArray()); 
     } 
    } 

    return files; 
} 
+0

Teşekkürler. Bunu arıyorum. Farklı sanal Extract() işlevlerine bakmadım. –

İlgili konular