.NET Framework 4.5 から、普通のZipファイルの圧縮・展開がとても簡単に扱えるようになりました。
例えばDBのblob(varbinary)列に格納された複数のファイル(のバイナリ)を読み出し、単一のZipファイルにアーカイブしてメモリストリーム上に保持するなら、こんな感じでできました。
// ※GetFilesFromDBはDBからファイルの情報を読みだして以下のようなクラスのIEnumerableなモノで返すと思ってくださいませ。 // class Hoge { // public string Name { get; set; } // public byte[] Bin { get; set; } // } var files = GetFilesFromDB(); using (var ms = new System.IO. MemoryStream()) { // メモリストリーム上にZipArchiveを作成する using ( var zipArchive = new ZipArchive(ms, ZipArchiveMode .Create, true )) { foreach ( var file in files) { // ファイルを追加していく。 // ファイル名を指定してエントリを作って… var entry = zipArchive.CreateEntry(file.Name); using ( var es = entry.Open()) { // エントリにバイナリを書き込む es.Write(file.Bin, 0, file.Bin.Length); } } } // あとはメモリストリーム (ms) を煮るなり焼くなり。 }