Подтвердить что ты не робот

SevenZipSharp - сжимать поток памяти

Я использую SevenZipSharp для сжатия файлов в zip файл. Есть ли способ использовать его для создания zip из потока памяти (что означает, загружать файл в поток памяти раньше)?

Спасибо, Майя.

4b9b3361

Ответ 1

Я использую SevenZipSharp с потоками без проблем, что бы это ни было.

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

В последней строке "ms" - это поток, который я хочу сжать, скажем, MemoryStream. "compressStream" - это поток, который я хочу закрепить, это может быть либо другой MemoryStream, либо даже FileStream...

Для декомпрессии:

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

В SevenZipExtractor отсутствует метод потока распаковки, поэтому вместо этого я использую ExtractFile().

Очень легко. И прежде чем какой-либо из вышеуказанных кодов будет вызван, я должен указать dll 7zip с:

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

В моем случае я не связываю 7z.dll с моим приложением, 7-zip устанавливается отдельно на машину.

Все просто супер. Я загрузил SevenZipSharp из codeplex - http://sevenzipsharp.codeplex.com/ и 7-zip из http://www.7-zip.org/.

Ответ 2

К сожалению, SevenZipSharp - это просто оболочка COM вокруг приложения 7z. Таким образом, нет легкой поддержки потока. Возможно, это можно проинструктировать через <SevenZipCompressor Instance>.CustomParameters.Add() для вывода файла на stdout, который затем может быть как-то прочитан в вашем приложении. Но это просто умозрительно, и у меня нет прямого совета о том, как заставить это работать.