7zipsharp извлечение / распаковка потока в поток
Я использую библиотеку sevenzipsharp: http://sevenzipsharp.codeplex.com/
Я задал похожий вопрос, когда я сжимал и распаковывал поток в одно и то же время, используя потоки, которые я с тех пор удалил из-за осознания того, что это невозможно. Однако мой вопрос остается в силе. Как мне распаковать / извлечь сжатый поток, не в файл, а в другой поток. Я искал примеры, предоставленные создателями sevenzipsharp в: http://sevenzipsharp.codeplex.com/SourceControl/latest, к сожалению, я не нашел действительного примера того, чего я пытаюсь достичь.
Я сжал поток с помощью этого метода:
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"));
}
1 ответ
Я нашел решение, когда писал этот вопрос, поэтому я сам отвечу на него для других людей, которые могут столкнуться с этой проблемой.
"ExtractFile" ожидает 2 параметра, номер 1 - это индекс файла в архиве, номер 2 - выходной поток или файл.,
но, объявляя SevenZipExtractor, вы предоставляете ему не архив, а сжатый поток, который уже находится в памяти, как я, и нет ничего, кроме одного файла, 1-й параметр (индекс) должен быть 0.
Окончательный код должен выглядеть так:
using (var tmp = new SevenZipExtractor((stream_to_compress)))
{
tmp.ExtractFile(0,output_stream ));
}