2010-11-18 157 views
10

ファイルをzipファイルに圧縮するためにSevenZipSharpを使用しています。 これを使用してメモリストリームからジップを作成する方法はありますか(つまり、ファイルをメモリストリームにロードする前に)?SevenZipSharp - メモリストリームを圧縮する

ありがとう、 Maya。

答えて

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は」、私はzip圧縮したいストリームである、それは別の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をはマシンに別々にインストールされています。

非常に簡単です。私はcodeplexからSevenZipSharp - http://sevenzipsharp.codeplex.com/をダウンロードし、http://www.7-zip.org/の7-zipをダウンロードしました。

+1

これは機能します。期待通りにSevenZipExtractor.DecompressStreamを使用するとエラーが発生します。 – Kaganar

+0

私はこれが古いと知っていますが、7z.dllをロードして正常に動作させることができません。私は7za.dllをロード/作業することができますが、それは.7zのみをサポートし、.zipサポートを探しています。どこで7z.dllが "正しい" dllを取得するのですか?ありがとう! –

関連する問題