3

ファイルをネットワーク経由で送信する前に圧縮したいと考えています。7zip は無料でオープン ソースであるため、最善のアプローチだと思います。

.net で 7zip を使用するにはどうすればよいですか?

それは無料で、C# のソース コードがあることは知ってい7zipますが、何らかの理由で C# では非常に遅いため7z.dll、パフォーマンス上の理由から 7zip をインストールするときに付属する dll を呼び出します。したがって、簡単にマーシャリングしてメソッドを呼び出す方法 は、 Sevenzipsharp7z.dllというライブラリを使用することです。たとえば、その dll をプロジェクトに追加すると、次のことが可能になります。

ここに画像の説明を入力

        // if you installed 7zip 64bit version then make sure you change plataform target
        // like on the picture I showed above!
        SevenZip.SevenZipCompressor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");

        var stream = System.IO.File.OpenRead(@"SomeFileToCompress.txt");
        var outputStream = System.IO.File.Create("Output.7z");

        SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
        compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
        compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
        compressor.CompressStream(stream, outputStream);

これが、C# 内で 7zip を使用する方法です。

今私の質問は:

圧縮ファイルをネットワーク経由で送信したいと考えています。最初に圧縮してから送信できることはわかっています。ファイルは 4GB あるので、圧縮されるまでしばらく待たなければなりません。ハードドライブで多くのスペースを浪費します。そうしたら、やっと送れるようになります。それはとても複雑だと思います。ファイルが圧縮されている間にファイルを送信する方法を知りたいと思っていました。


SevenZipSharp に問題があるようです:

ここに画像の説明を入力

4

2 に答える 2

2

代替ライブラリを検討しましたか?7-Zipをインストール/利用可能にする必要さえありませんか?

http://dotnetzip.codeplex.com/に投稿された説明から:

ストリームコンテンツからのzipファイルの作成、ストリームへの保存、ストリームへの抽出、ストリームからの読み取り

7-Zipとは異なり、DotNetZipはC#/.Netで動作するように設計されています。

ストリーミングを含む多くの例は、http://dotnetzip.codeplex.com/wikipage?title = CS-Examples&referringTitle=Examplesで入手できます

もう1つのオプションは、7-Zipコマンドラインバージョン(7z.exe)を使用して、標準の入出力に書き込み/読み取りを行うことです。これにより、7-Zipファイル形式を使用できると同時に、すべてのコア作業をネイティブコードで維持できます(ただし、大きな違いはあまりないでしょう)。

SevenZipSharpを振り返って:

0.29リリース以降、ストリーミングがサポートされています。

http://sevenzipsharp.codeplex.com/SourceControl/changeset/view/59007#364711を見てください:

この方法が必要なようです。

public void CompressStream(Stream inStream, Stream outStream)

ここでパフォーマンスをご検討いただきありがとうございます!あまりにも多くの人が、あなたが避けようとしていることを正確に実行すると思います。一時ファイルに圧縮してから、一時ファイルで何かを実行します。

于 2012-09-08T04:52:34.240 に答える