C# による zip アーカイブの作成方法
ZIP ファイルとは
ここでは zip ファイルを、プログラミングで作る方法を説明します。
zip ファイルはご存知の通り、複数のファイルを圧縮してひとつのファイルとしてまとめるアーカイブのファイルフォーマットです。
Windows では圧縮フォルダ (Compressed (zipped) folder) という名前でも登場してきます。
ZIP ファイルフォーマットは、1989年に米国のフィル・カッツによって開発され、ファイルフォーマット・仕様に関してはパブリックドメインにおかれてます。
C# プログラムから zip ファイルを作成する
プログラムから zip ファイルを作成する動機はいろいろあります。
例えば、 Java の jar ファイルや Android の apk ファイルなど、プログラムをポータブルにするために関連ファイルをひとまとめにする場合があります。
あるいは、ファイルをリモートサーバーに配置してある場合に、それをまとめてダウンロードをする場合などは、ひとつひとつダウンロードするよりも、 サーバー側でアーカイブを作成して、それをひとつダウンロードするほうが非常に効率的です。ファイルが圧縮されている点、プロトコルオーバーヘッドが減るなどの利点があります。
System.IO.Compression 名前空間の ZipFile クラスが利用可能
.NET Framework では System.IO.Compression.ZipFile クラスでは非常に簡便なメソッドが用意されています。その他 .NET Framework 3.0 の頃から ZipPackage クラスもありますが、簡便なのは ZipFile クラスなのでここではこれを利用します。
ひとつのディレクトリ内のファイルをまとめて zip ファイルにする場合は、次のように ZipFile クラスの CreateFromDirectory メソッドが使用できます。
using System.IO.Compression;
namespace ziptest1 {
class Program {
static void Main( string[] args ) {
ZipFile.CreateFromDirectory(
@"C:\Test",
@"C:\Temp\myzip1.zip" );
}
}
}
ファイルを一つ一つ指定する場合は、次のように ZipFile クラスの Open メソッドで zip ファイルを指定 (作成) し、CreateEntryFromFile メソッドでファイルを追加します。
using System.IO.Compression;
namespace ziptest1 {
class Program {
static void Main( string[] args ) {
using( var z = ZipFile.Open( @"C:\Temp\myzip1.zip",
ZipArchiveMode.Update ) ) {
z.CreateEntryFromFile(
@"C:\Test\a.txt", "a.txt", CompressionLevel.Optimal );
z.CreateEntryFromFile(
@"C:\Test\b.txt", "b.txt", CompressionLevel.Optimal );
}
}
}
}
ここでは myzip1.zip というファイルに a.txt と b.txt をアーカイブしています。