SevenZipSharp - сжатие потока памяти - PullRequest
10 голосов
/ 18 ноября 2010

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

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

Ответы [ 2 ]

13 голосов
/ 29 ноября 2010

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

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

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 / .

0 голосов
/ 18 ноября 2010

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

...