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

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

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


person Maya    schedule 18.11.2010    source источник


Ответы (2)


Я использую 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().

Очень просто. И прежде чем будет вызван какой-либо из приведенных выше кодов, я должен указать 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/.

person Marko    schedule 29.11.2010
comment
Это работает. Обратите внимание, что SevenZipExtractor.DecompressStream выдает ошибку, если вы используете его так, как ожидали. - person Kaganar; 04.01.2013
comment
Я знаю, что это старо, но я не могу заставить 7z.dll загружаться/работать должным образом. Я могу заставить 7za.dll загружаться/работать, но он поддерживает только .7z, и мне нужна поддержка .zip. Где/какую 7z.dll правильную dll взять? Спасибо! - person Nathan Bills; 10.08.2016

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

person Oliver    schedule 18.11.2010