SevenZipSharp - 压缩内存流

Posted

技术标签:

【中文标题】SevenZipSharp - 压缩内存流【英文标题】:SevenZipSharp - compress memory stream 【发布时间】:2010-11-18 12:20:56 【问题描述】:

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

谢谢, 玛雅人。

【问题讨论】:

【参考方案1】:

我正在使用带有流的 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 与我的应用程序捆绑在一起,7-zip 是单独安装到机器上的。

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

【讨论】:

这行得通。请注意,如果您按预期使用 SevenZipExtractor.DecompressStream 会引发错误。 我知道这是旧的,但我似乎无法让 7z.dll 正常加载/工作。我可以让 7za.dll 加载/工作,但它只支持 .7z,我正在寻找 .zip 支持。哪里/什么 7z.dll 是要获得的“正确” dll?谢谢!【参考方案2】:

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

【讨论】:

以上是关于SevenZipSharp - 压缩内存流的主要内容,如果未能解决你的问题,请参考以下文章

[源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流

如何将文件解压缩到 .NET 内存流?

Java压缩流GZIPStream导致的内存泄露

Java压缩流GZIPStream导致的内存泄露

为啥压缩然后未压缩不同长度的流

将 7z 文件视为 .NET 流