2010-11-18 148 views
10

我使用SevenZipSharp将文件压缩成zip文件。 有没有办法使用它从内存流中创建一个zip(意思是说,之前将文件加载到内存流中)?SevenZipSharp - 压缩内存流

谢谢, 玛雅人。

回答

0

不幸的是SevenZipSharp只是一个围绕7z应用程序的COM包装。所以没有简单的流支持。也许可以通过<SevenZipCompressor Instance>.CustomParameters.Add()指示它将文件输出到stdout,然后可以在应用程序中以某种方式读取该文件。但这只是推测性的,我没有直接提示如何让这个工作。

13

我使用SevenZipSharp与流没有问题,所以曾经。

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

在最后一行,“ms”是我想要压缩的流,比如说一个MemoryStream。 “compressedStream”是我要压缩到流,它可以是另一个MemoryStream的,甚至一个FileStream ...

对于减压:

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

的SevenZipExtractor没有一个解压缩流的方法,所以我使用ExtractFile()来代替。

很简单。和之前的任何上面的代码被称为我必须指定与7zip的DLL:

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

在我而言,我不捆绑与我的应用程序的7z.dll,7zip的是seperately安装在机器上。

总之超级容易。我从codeplex下载了SevenZipSharp - http://sevenzipsharp.codeplex.com/,从http://www.7-zip.org/下载了7-zip。

+1

This Works。请注意,如果您按照预期使用SevenZipExtractor.DecompressStream,则会引发错误。 – Kaganar 2013-01-03 22:24:22

+0

我知道这是旧的,但我似乎无法让7z.dll加载/正常工作。我可以让7za.dll加载/工作,但它只支持.7z,我正在寻找.zip支持。哪里/什么7z.dll是“正确”的DLL获取?谢谢! – 2016-08-10 19:15:52