ZipファイルにアクセスするためのライブラリとしてはDotNetZipが有名だが、.NET標準のSystem.IO.Compression.ZipArchiveクラスを使用した、ZIPファイルの作成についての備忘録を書いてみようと思う。
なぜ、ZipArchiveを利用しようとしたのかというと、最初はDotNetZipを使ってコードを書いたのだが、Webページからのダウンロードがうまく動作せず、原因を突き止めるより、別のライブラリを使用した方が早いかなという感じで、色々調べてみたのだが、まぁ、.NET標準だし、これでいいかなと採用したわけ。
ZIPファイルを作成するには、ZipFileクラスを使った方が簡単なのだが、今回はWebアプリで、動的に作成した内容をZip化したいので、ZipArchiveクラスを使用する。
ZipArchiveクラスは書込先となるStreamを指定して作成する。その中にエントリを追加して行く形だ。
実際のコードを見てみると以下のような感じ。
using System.IO;
using System.IO.Compression;
・・・
using(MemoryStream zipstream = new MemoryStream()) { // ZipArchiveを書込むStream
using(ZipArchive ar = new ZipArchive(zipstream,ZipArchiveMode.Create,true)) { // ZipArchiveの作成
// ZipEntry=ファイルの作成
ZipArchiveEntry ent = ar.CreateEntry(entry1);
using(Stream stm = ent.Open()) { // エントリのStreamを取得
using(StreamWriter wtr = new StreamWriter(stm,Encoding.GetEncoding("shift_jis"))) { // 文字列書き込み用StreamWriter
// ファイル内容作成
・・・
await wtr.FlushAsync();
await stm.FlushAsync();
}
}
// 必要分上記の繰返し
・・・
}
await zipstream.FlushAsync();
byte[] buff = zipstream.ToArray();
return File(buff,"application/octet-stream",ZipFileName);
}DotNetZipと比べると多少面倒で、パスワードがけられない等の問題もあるけど、目的が果たせたから良しとしよう。





Users Today : 40
Users Yesterday : 44
Users Last 7 days : 183
Users Last 30 days : 964
Users This Month : 843
Users This Year : 15669
Total Users : 93473
Views Today : 59
Views Yesterday : 53
Views Last 7 days : 241
Views Last 30 days : 1232
Views This Month : 1059
Views This Year : 21264
Total views : 131199
Who's Online : 1