今回は、System.IO.Compression.ZipFileクラスについてちょこっとメモメモ。
ZipFileクラスは.NET Framework 4.5から追加された型です。
文字通り、ZIP形式のファイルを扱うためのクラスです。4.5になって、やっと追加されました。
これが追加されるまでは、J#のライブラリ使ったり、ShellのCopyHereを使ったり、DotNetZip使ったりいろいろありましたが、それはさておき...。
このクラスを利用するためには
System.IO.Compression.FileSystem.dll
を参照設定に追加する必要があります。
また、このクラスはMetro (新しい名前はWindows 8スタイルUI ??)では利用できません。
Metroでは、同じ機能を持つZipArchiveクラスを利用する必要があります。
利用方法は簡単で、シンプルに圧縮と解凍をするだけなら、以下の2つのメソッドで事足ります。
// 圧縮 public static void CreateFromDirectory(string, string) // 解凍 public static void ExtractToDirectory(string, string)
以下サンプルです。
#region ZipFileSamples-01 /// <summary> /// System.IO.Compression.ZipFileクラスのサンプルです。 /// </summary> /// <remarks> /// ZipFileクラスは、.NET Framework 4.5で追加されたクラスです。 /// このクラスを利用するには、「System.IO.Compression.FileSystem.dll」を /// 参照設定に追加する必要があります。 /// </remarks> public class ZipFileSamples01 : IExecutable { public void Execute() { // // ZipFileクラスは、ZIP形式のファイルを扱うためのクラスである。 // 同じ事が出来るクラスとして、ZipArchiveクラスが存在するが // こちらは、きめ細かい処理が行えるクラスとなっており // ZipFileクラスは、ユーティリティクラスの扱いに近い。 // // ZipFileクラスに定義されているメソッドは、全てstaticメソッドとなっている。 // // 簡単に圧縮・解凍するためのメソッドとして // ・CreateFromDirectory(string, string) // ・ExtractToDirectory(string, string) // が用意されている。 // // 尚、このクラスはMetroスタイルアプリ (新しい名前はWindows 8スタイルUI?) // では利用できないクラスである。Metroでは、ZipArchiveを利用することになる。 // (http://msdn.microsoft.com/en-us/library/system.io.compression.zipfile) // // // 圧縮. // string srcDirectory = Environment.CurrentDirectory; string dstDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string dstFilePath = Path.Combine(dstDirectory, "ZipTest.zip"); if (File.Exists(dstFilePath)) { File.Delete(dstFilePath); } ZipFile.CreateFromDirectory(srcDirectory, dstFilePath); // // 解凍. // string extractDirectory = Path.Combine(dstDirectory, "ZipTest"); if (Directory.Exists(extractDirectory)) { Directory.Delete(extractDirectory, recursive: true); Directory.CreateDirectory(extractDirectory); } ZipFile.ExtractToDirectory(dstFilePath, extractDirectory); } } #endregion
実行すると、カレントディレクトリの内容を圧縮して、デスクトップに出力します。
その後、出力したZipファイルを解凍しています。
以下、参考資料です。
- ZipFile Class
- ZipArchive Class
- ZipArchiveEntry Class
- DotNetZip Library
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場