C#でファイルやフォルダをすばやく圧縮または解凍するには、誰も知っていますか?大きなファイルを処理する必要があります。フォルダとファイルを圧縮/解凍する
答えて
.Net 1.1以降で利用できる唯一の方法は、Javaライブラリに到達することです。
Using the Zip Classes in the J# Class Libraries to Compress Files and Data with C#
最近のバージョンでこれが変更されているかどうかは不明です。
私はいつもSharpZipライブラリを使用してきました。トムが指摘したように
あなたは3rd-party library such as SharpZipを使用することができます。
別の方法(サードパーティ製以外)では、WindowsシェルAPIを使用することです。 C#プロジェクトでMicrosoftシェルコントロールとオートメーションCOMライブラリへの参照を設定する必要があります。ジェラルド・ギブソンがで例があります。
http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx
これはJavaで行うことは非常に簡単です、と述べたように、あなたは、C#からjava.util.zipライブラリに達することができる上。参照を参照してください。
java.util.zip javadocs
sample code
私は、フォルダ構造の深い(再帰)ジップを行うにはしばらく前にこれを使用しますが、私は私が今まで解凍を使用しないと思います。私がそのような動機を持っているなら、そのコードを取り出して、後で編集することができます。
.Net 2.0フレームワークネームスペースSystem.IO.Compression
は、GZipおよびDeflateアルゴリズムをサポートしています。ファイルオブジェクトから取得できるバイトストリームを圧縮および解凍するには、次の2つの方法があります。以下の方法でDefaultStream
にGZipStream
を代入して、そのアルゴリズムを使用することができます。しかし、これはまだ異なるアルゴリズムで圧縮されたファイルを扱うという問題を残す。
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();
}
DotNetZipでもいいです。
GZipStreamは本当に便利なユーティリティです。
私の答えはあなたの目を閉じ、DotNetZipを選ぶでしょう。それは大きなコミュニティによってテストされています。
あなたがこの方法でzipファイルを作成することができます。
public async Task<string> CreateZipFile(string sourceDirectoryPath, string name)
{
var path = HostingEnvironment.MapPath(TempPath) + name;
await Task.Run(() =>
{
if (File.Exists(path)) File.Delete(path);
ZipFile.CreateFromDirectory(sourceDirectoryPath, path);
});
return path;
}
、その後、あなたがこの方法でzipファイルを解凍することができます
1 - ZIPファイルのパス
public async Task ExtractZipFile(string filePath, string destinationDirectoryName)
{
await Task.Run(() =>
{
var archive = ZipFile.Open(filePath, ZipArchiveMode.Read);
foreach (var entry in archive.Entries)
{
entry.ExtractToFile(Path.Combine(destinationDirectoryName, entry.FullName), true);
}
archive.Dispose();
});
}
2と、このメソッドの仕事を - このメソッドはzipファイルストリームで動作します
public async Task ExtractZipFile(Stream zipFile, string destinationDirectoryName)
{
string filePath = HostingEnvironment.MapPath(TempPath) + Utility.GetRandomNumber(1, int.MaxValue);
using (FileStream output = new FileStream(filePath, FileMode.Create))
{
await zipFile.CopyToAsync(output);
}
await Task.Run(() => ZipFile.ExtractToDirectory(filePath, destinationDirectoryName));
await Task.Run(() => File.Delete(filePath));
}
- 1. Windows.Storage.Compression圧縮フォルダの解凍
- 2. C#圧縮とJavaScript解凍
- 3. Java - 異なる圧縮ファイルの解凍
- 4. C#でフォルダを圧縮および解凍する
- 5. インプログラムの圧縮/解凍
- 6. 圧縮コマンドラインからのコピーと解凍
- 7. 圧縮データとJavaScriptで解凍
- 8. JavaScript:圧縮解除/拡張/解凍/解凍文字列
- 9. Javaの7zファイルを圧縮して解凍する
- 10. 解凍したexeファイルを圧縮する
- 11. UPX Win32/PE圧縮ファイルの解凍を禁止する
- 12. SSISでファイルを解凍して圧縮する方法
- 13. gunzipで文字列を圧縮/解凍
- 14. Adobe Air/Javascriptでのファイルの圧縮と解凍
- 15. アンドロイドのファイルとフォルダを圧縮する
- 16. Java LZW画像で圧縮&解凍
- 17. Java圧縮および解凍バイト[]チャンク
- 18. JPG処理手順圧縮解凍
- 19. @ font-faceフォントの圧縮/解凍
- 20. ASTCソフトウェアのテクスチャ圧縮/解凍のアルゴリズム
- 21. Androidアプリケーションのsdカードに圧縮されたファイルを解凍
- 22. PHPを使用すると、圧縮されたフォルダ内のフォルダを再帰的に解凍できますか?
- 23. ファイルを圧縮して解凍する7zのSDKを使用する方法
- 24. javaプログラム(フォルダとファイル)の圧縮
- 25. ソケットを介してデータを圧縮および解凍する
- 26. スタティックLZMA圧縮ファイルをプログラムで圧縮解除する
- 27. androidのファイルがいっぱいのフォルダを圧縮/圧縮
- 28. 圧縮されたカーネルを解凍する方法
- 29. IMAPの圧縮されたメッセージを解凍する
- 30. Pythonでテキストファイルを圧縮および解凍する
注:* int overが見つかりました何年も前にSharpZipコードでflow *バグが発生したため、ちょうどそのような値の組み合わせがランダムに発生してしまった。それがこれまでに修正されているかどうかは確かではありませんが、メモリからSharpZipソース内の 'int'変数を' long'に変更してオーバーフローを避けました。 *私は古い固定シャープジップコードを見つけて、それが最新のものと一致するかチェックしなければならない*。 –