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