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. C#圧縮とJavaScript解凍
- 2. Java - 異なる圧縮ファイルの解凍
- 3. C#でフォルダを圧縮および解凍する
- 4. インプログラムの圧縮/解凍
- 5. 圧縮コマンドラインからのコピーと解凍
- 6. 圧縮データとJavaScriptで解凍
- 7. JavaScript:圧縮解除/拡張/解凍/解凍文字列
- 8. Javaの7zファイルを圧縮して解凍する
- 9. UPX Win32/PE圧縮ファイルの解凍を禁止する
- 10. Adobe Air/Javascriptでのファイルの圧縮と解凍
- 11. アンドロイドのファイルとフォルダを圧縮する
- 12. ASTCソフトウェアのテクスチャ圧縮/解凍のアルゴリズム
- 13. @ font-faceフォントの圧縮/解凍
- 14. Androidアプリケーションのsdカードに圧縮されたファイルを解凍
- 15. ファイルを圧縮して解凍する7zのSDKを使用する方法
- 16. スタティックLZMA圧縮ファイルをプログラムで圧縮解除する
- 17. androidのファイルがいっぱいのフォルダを圧縮/圧縮
- 18. 圧縮されたカーネルを解凍する方法
- 19. C#でバイト[]を圧縮(および解凍)する方法は?
- 20. Android:PHPで圧縮された文字列を解凍するgzcompress()
- 21. C#を使用して圧縮ファイルを解凍する方法は?
- 22. Windows Phone 7でLZMA圧縮zipファイルを解凍する方法は?
- 23. htmlからサーバへのテキストの圧縮と解凍
- 24. Javaの文字列データの圧縮と解凍
- 25. 圧縮/解凍テクニックに関する文書
- 26. apache圧縮圧縮されていない.jsファイルと.cssファイルを圧縮解除しますか?
- 27. JavaでJSONを圧縮する方法とJavascriptで解凍する
- 28. PHPは.NET GZipStreamクラスで圧縮されたファイルを解凍できますか?
- 29. SSISのフォルダ圧縮
- 30. デフラータを使用した文字列の圧縮/解凍
注:* int overが見つかりました何年も前にSharpZipコードでflow *バグが発生したため、ちょうどそのような値の組み合わせがランダムに発生してしまった。それがこれまでに修正されているかどうかは確かではありませんが、メモリからSharpZipソース内の 'int'変数を' long'に変更してオーバーフローを避けました。 *私は古い固定シャープジップコードを見つけて、それが最新のものと一致するかチェックしなければならない*。 –