60

C# でファイルやフォルダーをすばやく圧縮または解凍する良い方法を知っている人はいますか? 大きなファイルの処理が必要になる場合があります。

4

9 に答える 9

27

The .Net 2.0 framework namespace System.IO.Compression supports GZip and Deflate algorithms. Here are two methods that compress and decompress a byte stream which you can get from your file object. You can substitute GZipStream for DefaultStream in the methods below to use that algorithm. This still leaves the problem of handling files compressed with different algorithms though.

public static byte[] Compress(byte[] data)
{
    MemoryStream output = new MemoryStream();

    GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
    gzip.Write(data, 0, data.Length);
    gzip.Close();

    return output.ToArray();
}

public static byte[] Decompress(byte[] data)
{
    MemoryStream input = new MemoryStream();
    input.Write(data, 0, data.Length);
    input.Position = 0;

    GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);

    MemoryStream output = new MemoryStream();

    byte[] buff = new byte[64];
    int read = -1;

    read = gzip.Read(buff, 0, buff.Length);

    while (read > 0)
    {
        output.Write(buff, 0, read);
        read = gzip.Read(buff, 0, buff.Length);
    }

    gzip.Close();

    return output.ToArray();
}
于 2008-08-05T12:04:41.127 に答える
22

私はいつも SharpZip ライブラリを使用してきました。

ここにリンクがあります

于 2008-08-01T17:30:56.277 に答える
10

.Net 1.1 の時点で、利用可能なメソッドは Java ライブラリに到達することだけです。

J# クラス ライブラリの Zip クラスを使用して C# でファイルとデータを圧縮する

これが最近のバージョンで変更されたかどうかはわかりません。

于 2008-08-01T17:28:24.253 に答える
10

トムが指摘したように、SharpZip などのサードパーティ ライブラリを使用できます。

もう 1 つの方法 (サード パーティを使用しない) は、Windows Shell API を使用することです。C# プロジェクトで Microsoft Shell Controls and Automation COM ライブラリへの参照を設定する必要があります。Gerald Gibson の例は次のとおりです。

Internet Archive のデッド ページのコピー

于 2008-08-01T18:04:25.023 に答える
8

私の答えは、目を閉じてDotNetZipを選ぶことです。大規模なコミュニティによってテストされています。

于 2013-11-17T16:08:25.950 に答える
6

GZipStreamは非常に優れたユーティリティです。

于 2012-05-13T02:01:39.030 に答える
5

別の良い代替手段もDotNetZipです。

于 2011-12-08T22:29:36.020 に答える
5

これは Java で行うのは非常に簡単で、前述のように、C# から java.util.zip ライブラリにアクセスできます。参照については、次を参照してください。

java.util.zip javadoc
サンプル コード

少し前にこれを使用して、フォルダー構造の深い (再帰的な) zip を実行しましたが、解凍を使用したことはないと思います。やる気があれば、そのコードを取り出して、後でここに編集するかもしれません。

于 2008-08-04T23:52:51.290 に答える