2012-06-28 16 views
7

Bir zip dosyasına MemoryStream bir dosya eklemek için DotNetZip kullanıyorum ve daha sonra bir eklenti olarak e-posta gönderebilmem için bu zip'i MemoryStream olarak kaydediyorum. Aşağıdaki kod hata vermez, ancak MemoryStream doğru okunamadığından doğru yapılmamalıdır. Zip'i sabit diskime kaydettiğimde her şey mükemmel çalışıyor, sadece bir akışa kaydetmeye çalıştığımda değil.DotNetZip Yayına Kaydetme

using (ZipFile zip = new ZipFile()) 
{ 
var memStream = new MemoryStream(); 
var streamWriter = new StreamWriter(memStream); 

streamWriter.WriteLine(stringContent); 

streamWriter.Flush();  
memStream.Seek(0, SeekOrigin.Begin); 

ZipEntry e = zip.AddEntry("test.txt", memStream); 
e.Password = "123456!"; 
e.Encryption = EncryptionAlgorithm.WinZipAes256; 

var ms = new MemoryStream(); 
ms.Seek(0, SeekOrigin.Begin); 

zip.Save(ms); 

//ms is what I want to use to send as an attachment in an email         
} 
+0

Bellek akışı zip verileriyse, okunamaz durumda olmasını beklemez miydiniz? –

+0

Bellek akışını bir dosyaya kaydetmeyi denediniz mi ve dosyayı doğrudan ZipFile'dan dosyaya kaydettiğinizde dosyanın kaynağının dosyadan farklı olduğunu doğruladınız mı? – erikH

+0

Sam I - Bellek akışını alıyorum ve test.zip adlı ek olarak gönderiyorum. Sonra gittim, onu düzenli bir zip dosyası olarak ele alabileceğimi düşündüm. Bunu düşünürken yanlış mıyım? – user229133

cevap

8

Ben kodunuzu kopyalanmış ve sonra data.txt olarak diske son bellek buhar kurtardım. Bana tamamen okunamazdı, ama bir metin dosyası olmadığını fark ettim, bir zip dosyasıydı, bu yüzden onu data.zip olarak kaydettim ve beklediğim gibi çalıştı

MS diske kaydetmek için kullandığım yöntem Yani

  ms.Position = 0; 
      byte[] data = ms.ToArray(); 
      File.WriteAllBytes("data.zip", data); 

(hemen zip.Save(ms); satırdan sonra) takip ediyor, senin hafıza akışı metni sıkıştırılmış olan, o olması gerekiyordu ne olduğuna inanıyoruz. Sıkışana kadar okunamaz.

+0

"ms" adlı bellek akışını diske alıp unzip etmeyi denediğimde "Arşiv bilinmeyen bir biçimde ya da bozuk" hatası alıyor . Bellek akışı "ms" veya "memStream" hakkında mı konuşuyorsunuz? – user229133

+0

@ user229133 Ms'yu diske nasıl kaydettiğimi göstermek için yayınımı düzenledim. –

12

Sorunumu anladım, aslında oldukça aptalca. Herkesin yardımları için teşekkürler!

ZipEntry e = zip.AddEntry("test.txt", memStream); 
e.Password = "123456!"; 
e.Encryption = EncryptionAlgorithm.WinZipAes256; 

//zip.Save("C:\\Test\\Test.zip"); 

//Stream outStream; 

var ms = new MemoryStream(); 

zip.Save(ms); 

    //--Needed to add the following 2 lines to make it work---- 
ms.Seek(0, SeekOrigin.Begin); 
ms.Flush(); 
+4

'u deneyin. Son iki satır yerine 'ms' üzerinden bir kullanım statüsü kullanılmalıdır. – SerG