SevenZipSharp - сжатие потока памяти
Я использую SevenZipSharp для сжатия файлов в ZIP-файл. Есть ли способ использовать его для создания почтового индекса из потока памяти (имеется в виду, загрузить файл в поток памяти раньше)?
Спасибо майя
2 ответа
Я использую 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/.
К сожалению, SevenZipSharp - это просто оболочка COM вокруг приложения 7z. Так что нет легкой поддержки потока. Может быть, это можно проинструктировать через <SevenZipCompressor Instance>.CustomParameters.Add()
вывести файл в stdout
, который затем можно прочитать как-то в вашем приложении. Но это просто умозрительно, и у меня нет прямого совета, как заставить это работать.