2010-11-18 13 views
10

Estoy usando SevenZipSharp para comprimir archivos en un archivo zip. ¿Hay alguna manera de usarlo para crear un archivo comprimido a partir de una secuencia de memoria (es decir, cargar el archivo en la secuencia de memoria anterior)?SevenZipSharp - comprime el flujo de memoria

Gracias, Maya.

Respuesta

0

Desafortunadamente, SevenZipSharp es solo un contenedor COM de la aplicación 7z. Por lo tanto, no hay soporte de transmisión fácil. Tal vez es posible instruirlo a través del <SevenZipCompressor Instance>.CustomParameters.Add() para enviar el archivo a stdout, que luego se puede leer de alguna manera en su aplicación. Pero esto es solo especulativo y no tengo información directa sobre cómo hacer que esto funcione.

13

Estoy usando SevenZipSharp con transmisiones sin problema alguno.

SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor(); 
compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2; 
compressor.CompressionLevel = SevenZip.CompressionLevel.Normal; 
compressor.CompressStream(ms, compressedStream); 

En la línea final, "ms" es una secuencia que quiero comprimir, digamos un MemoryStream. "Compressedstream" es la corriente Quiero zip a, que puede ser o bien otra MemoryStream o incluso un FileStream ...

para la descompresión:

SevenZip.SevenZipExtractor extractor = new SevenZip.SevenZipExtractor(compressedStream); 
extractor.ExtractFile(0, decompressedStream); 

El SevenZipExtractor no tiene un método corriente de descompresión, así que uso ExtractFile() en su lugar.

Muy fácil. Y antes de cualquier parte del código de arriba se llama debo especificar el archivo DLL con 7zip:

SevenZip.SevenZipBase.SetLibraryPath(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\7-zip\\7z.dll"); 

En mi caso, no junte el 7z.dll con mi aplicación, 7zip se instala por separado en la máquina .

Todo en super muy fácil. Descargué SevenZipSharp de codeplex - http://sevenzipsharp.codeplex.com/ y 7-zip desde http://www.7-zip.org/.

+1

Esto funciona. Tenga en cuenta que SevenZipExtractor.DecompressStream arroja un error si lo usa como era de esperar. – Kaganar

+0

Sé que esto es viejo, pero parece que no puedo obtener el 7z.dll para cargar/funcionar correctamente. Puedo obtener 7za.dll para cargar/trabajar, pero solo soporta .7z, y estoy buscando soporte para .zip. ¿Dónde/qué 7z.dll es el dll "correcto" para obtener? ¡Gracias! –