10

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

ありがとう、マヤ。

4

2 に答える 2

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 をアプリにバンドルせず、7-zip をマシンに個別にインストールします。

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

于 2010-11-29T15:51:49.960 に答える
0

残念ながら、SevenZipSharp は 7z アプリケーションの単なる COM ラッパーです。したがって、簡単なストリーム サポートはありません。おそらく<SevenZipCompressor Instance>.CustomParameters.Add()、ファイルを に出力するように指示することがstdoutできます。これは、アプリケーションで何らかの方法で読み取ることができます。しかし、これは単なる推測であり、これを機能させる方法に関する直接的なヒントはありません。

于 2010-11-18T12:44:16.543 に答える