1

我正在使用sevenzipsharp 库:http ://sevenzipsharp.codeplex.com/

我在女巫中提出了一个类似的问题,我正在使用线程“同时”压缩和解压缩流,女巫因为意识到这一点而被删除,这是无法做到的。但是我的问题仍然存在。我如何解压缩/提取压缩流,而不是文件,而是另一个流。我在以下网址搜索了sevenzipsharp 创建者提供的示例:http ://sevenzipsharp.codeplex.com/SourceControl/latest#SevenZipTest/Program.cs ,遗憾的是我没有找到我想要实现的有效示例。

我用这种方法压缩了流:

            SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
            compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
            compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
            compressor.CompressStream(stream,output_compressed);

我试过这个:

            using (var tmp = new SevenZipExtractor(compressed))
            {
                tmp.ExtractFile(1, File.Create(@"D:\lel.txt"));
            }
4

1 回答 1

2

我在写这个问题时找到了解决方案,所以我会为可能遇到这个问题的其他人自己回答。

'ExtractFile' 需要 2 个参数,数字 1 是存档内文件的索引,数字 2 是输出流或文件。,

但是,在声明 SevenZipExtractor 时,您提供的不是存档,而是像我一样已经在内存中的压缩流,并且只有一个文件,第一个参数(索引)必须为 0。

最终代码应如下所示:

            using (var tmp = new SevenZipExtractor((stream_to_compress)))
            {
                tmp.ExtractFile(0,output_stream ));
            }
于 2016-03-31T11:07:53.080 回答