C# でファイルやフォルダーをすばやく圧縮または解凍する良い方法を知っている人はいますか? 大きなファイルの処理が必要になる場合があります。
9 に答える
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();
}
私はいつも SharpZip ライブラリを使用してきました。
.Net 1.1 の時点で、利用可能なメソッドは Java ライブラリに到達することだけです。
J# クラス ライブラリの Zip クラスを使用して C# でファイルとデータを圧縮する
これが最近のバージョンで変更されたかどうかはわかりません。
トムが指摘したように、SharpZip などのサードパーティ ライブラリを使用できます。
もう 1 つの方法 (サード パーティを使用しない) は、Windows Shell API を使用することです。C# プロジェクトで Microsoft Shell Controls and Automation COM ライブラリへの参照を設定する必要があります。Gerald Gibson の例は次のとおりです。
私の答えは、目を閉じてDotNetZipを選ぶことです。大規模なコミュニティによってテストされています。
GZipStreamは非常に優れたユーティリティです。
別の良い代替手段もDotNetZipです。
これは Java で行うのは非常に簡単で、前述のように、C# から java.util.zip ライブラリにアクセスできます。参照については、次を参照してください。
java.util.zip javadoc
サンプル コード
少し前にこれを使用して、フォルダー構造の深い (再帰的な) zip を実行しましたが、解凍を使用したことはないと思います。やる気があれば、そのコードを取り出して、後でここに編集するかもしれません。