2012-06-28 10 views
7

Estoy usando DotNetZip para agregar un archivo de MemoryStream a un archivo zip y luego guardarlo como MemoryStream para poder enviarlo por correo electrónico como un archivo adjunto. El código siguiente no se equivoca, pero el MemoryStream no se debe hacer bien porque no se puede leer. Cuando guardo el archivo zip en mi disco duro, todo funciona perfectamente, pero no cuando intento guardarlo en una transmisión.DotNetZip Guardar en la corriente

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

SI el flujo de memoria es comprimido, ¿no esperaría que fuera ilegible? –

+0

¿Ha intentado guardar la secuencia de la memoria en un archivo y ha verificado que la información de ese archivo difiere del archivo cuando la guarda en un archivo directamente desde ZipFile? – erikH

+0

Sam Estoy: estoy tomando la secuencia de la memoria y enviándola como un archivo adjunto llamado test.zip. Luego lo conseguí, pensé que debería poder tratarlo como un archivo zip normal. ¿Me equivoco al pensar esto? – user229133

Respuesta

8

He copiado el código, y luego salvó su último recuerdo de vapor en el disco como data.txt. Era completamente ilegible para mí, pero luego me di cuenta de que no era un archivo de texto, era un archivo zip, así que lo guardé como data.zip y funcionó como esperaba

el método que utilicé para guardar ms en el disco es la siguiente (inmediatamente después de su línea zip.Save(ms);)

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

por lo tanto, creo que su secuencia de memoria es lo que se supone que es, que se comprime el texto. No será legible hasta que lo descomprimas.

+0

Cuando obtengo el flujo de memoria llamado "ms" en el disco e intento descomprimirlo, aparece el error "El archivo está en formato desconocido o dañado" . ¿Estás hablando de la secuencia de memoria "ms" o "memStream"? – user229133

+0

@ user229133 Acabo de editar mi publicación para mostrarle cómo guardé ms en el disco. Intente eso –

12

Ok, descubrí mi problema, bastante estúpido en realidad. Gracias por la ayuda de todos!

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

En lugar de las dos últimas líneas, se debe usar una declaración de uso sobre 'ms'. – SerG

Cuestiones relacionadas