SevenZipSharp - 压缩内存流

10

我正在使用SevenZipSharp将文件压缩成zip文件。 有没有办法使用它从内存流创建zip(即在之前将文件加载到内存流中)?

谢谢, 玛雅。

2个回答

14

我正在使用SevenZipSharp与流进行操作,一切都很顺利。

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

最后一行中,“ms” 是我想要压缩的流,例如 MemoryStream。"compressedStream" 是我想要将其压缩成 zip 格式的流,可以是另一个 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与我的应用程序捆绑在一起,而是单独安装7-zip到计算机上。
总的来说非常简单。我从codeplex下载了SevenZipSharp - http://sevenzipsharp.codeplex.com/,并从http://www.7-zip.org/下载了7-zip。

1
这个可以运行。请注意,如果您按照预期使用SevenZipExtractor.DecompressStream,则会抛出错误。 - Kaganar
我知道这已经过时了,但是我似乎无法正确加载/使用7z.dll。我可以加载/使用7za.dll,但它仅支持.7z格式,而我正在寻找.zip格式的支持。哪个/哪些7z.dll是“正确”的dll?谢谢! - Nathan Bills

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接