どの方法が「最良」だと思いますか。
System.IO.Packaging
名前空間を使用しますか?- シェルとの相互運用を使用しますか?
- .NET 用のサードパーティ ライブラリ?
- オープン ソースの管理されていない DLL との相互運用性はありますか?
[Framework 3.5 をターゲットにすることができます。最高 = 設計、実装、および保守が最も簡単です。]
私は主に、選択したアプローチが最適であるとあなたが考える理由に興味があります。
I've always used SharpZipLib
Forgot the why part: Mainly because its been around for a long time. It is well documented, and has an intuitive API. Plus it's open source if you're into that type of thing.
DotNetZipの使い方は非常に簡単です。完全に管理されているため、気に入っています。シェルとのやり取りは必要ありません。プログラミング モデルは、シェルの場合よりも単純でクリーンです。また、SharpZipLib や .NET 3.0 で追加された Packaging クラスよりも単純です。それは無料で、小さく、積極的に維持されています。
あるポスターが提供した J# オプションよりもはるかに優れています。J# は巨大なランタイムであり、ZIP サポートだけを得るために飲み込む巨大な錠剤です。また、J# のサポートは廃止されています。J# に新しい依存関係を導入することは、おそらく良い考えではありません。
DotNetZip のコード例:
try
{
using (ZipFile zip = new ZipFile(args[0], System.Console.Out))
{
zip.AddDirectory(args[1]); // recurses subdirectories
zip.Save();
}
}
catch (System.Exception ex1)
{
System.Console.Error.WriteLine("exception: " + ex1);
}
DotNetZip は、.NET v2.0、3.0、3.5、および Compact Framework v2.0 と 3.5 で動作します。ZIP ファイル、Unicode ファイル名、コメント、パスワードを処理します。ZIP64 と自己解凍アーカイブを実行します。これは速い。それを試してみてください。
DotNetZip ライブラリは、zip ファイルを操作する最も簡単な方法であることがわかりました。SharpZipLibは、はるかに強力で柔軟なソリューションです。
これは古い質問だと思いますが、最新の回答を追加したいと思いました。.NET 4.5 を使用している場合は、新しい組み込みZipFile
クラスを使用して、複数のファイルをプログラムで簡単に zip フォルダーに保存できます。
Directory.CreateDirectory
まず、ファイルを新しいフォルダー ( 、 )に準備する必要があります。File.Move
次に、ZipFile.CreateFromDirectory
メソッド(リンクされたページから適応) を使用できます。
string filePathOfNewFolder = @"c:\example\start";
string zipFilePath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(filePathOfNewFolder, zipFilePath);
Xceed Zip コンポーネントについては誰も言及していません。以前に使用したことがありますが、zip ファイルの作成とデータ ストリームの圧縮に非常に適していました。強くお勧めしますが、ライセンス料のトレードオフがあるかもしれません。
The GZipStream and DeflateStream classes under System.IO.Compression namespace make it pretty easy to zip things up.
UPDATE: Comments correctly state that these classes do not allow you to manipulate a Zip file. However, the J# dlls contain the required functionality in java.util and java.io namespaces. For more details see the Code Project article by dmihailescu which details their use and provides sample code.
あなたはFramework 3.5をターゲットにしているので、私はSystem.IO.Packaging
. これは圧縮専用に設計されたライブラリであり、フレームワークに付属しているため、製品に必要な追加の DLL さえありません。ただし、使用例はひどいものです。
シェルの使用はお勧めしません。まず、Windows XP 以降でのみ動作します。しかし、それを気にしなくても、落とし穴はたくさんあります (以前にやったことがありますが、本当に選択の余地がなかったからです)。
3.5 をターゲットにしていない場合は、SharpZipLib
. これは非常に優れたライブラリであり、3.5 を使用している場合でも検討することができます。