だいぶ前も不安視していた、.NET 4.5のZipArchiveクラスですが、やっぱりマルチバイト系のエンコーディングは強制的にUTF-8で格納されているっポイですね…。パッと見、エンコーディングを指定できないようですがどうするんだろう。ZipArchiveEntryっていうクラスがあって、それぞれのファイル単位にもつメタデータのようですがこれもstringですし…うーん。日本語feedbackサイトが閉じられているけど、英語のほうに行くしかないのかな。
using System; using System.IO.Compression; using System.IO; namespace ziptest { class Program { static void Main(string[] args) { using (var zip = new ZipArchive(@"c:\temp\あ\ziptest.zip", ZipArchiveMode.Create)) { var files = new DirectoryInfo(@"c:\temp").GetFiles("*.*"); Array.ForEach(files, x => zip.CreateEntryFromFile(x.FullName, x.Name)); } } } }