2010-11-18 183 views
10

我使用SevenZipSharp將文件壓縮成zip文件。 有沒有辦法使用它從內存流中創建一個zip(意思是說,之前將文件加載到內存流中)?SevenZipSharp - 壓縮內存流

謝謝, 瑪雅人。

回答

0

不幸的是SevenZipSharp只是一個圍繞7z應用程序的COM包裝。所以沒有簡單的流支持。也許可以通過<SevenZipCompressor Instance>.CustomParameters.Add()指示它將文件輸出到stdout,然後可以在應用程序中以某種方式讀取該文件。但這只是推測性的,我沒有直接提示如何讓這個工作。

13

我使用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()來代替。

很簡單。和之前的任何上面的代碼被稱爲我必須指定與7zip的DLL:

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

在我而言,我不捆綁與我的應用程序的7z.dll,7zip的是seperately安裝在機器上。

總之超級容易。我從codeplex下載了SevenZipSharp - http://sevenzipsharp.codeplex.com/,從http://www.7-zip.org/下載了7-zip。

+1

This Works。請注意,如果您按照預期使用SevenZipExtractor.DecompressStream,則會引發錯誤。 – Kaganar 2013-01-03 22:24:22

+0

我知道這是舊的,但我似乎無法讓7z.dll加載/正常工作。我可以讓7za.dll加載/工作,但它只支持.7z,我正在尋找.zip支持。哪裏/什麼7z.dll是「正確」的DLL獲取?謝謝! – 2016-08-10 19:15:52