[github] https://github.com/chronos2015/samples/tree/master/visualstudio/cs/05.zip
フォルダ指定で一度に圧縮するメソッドが用意されているのは想定してなかった。
// 1.フォルダをそのままZIPファイルに圧縮する場合
ZipFile.CreateFromDirectory("target", "target1.zip", CompressionLevel.Optimal, true, Encoding.UTF8);
// 2.ファイルを指定して、又はメモリ上のストリームなどを圧縮する場合
using (ZipArchive zip = ZipFile.Open("target2.zip", ZipArchiveMode.Create))
{
ZipArchiveEntry entry = zip.CreateEntry("English.txt", CompressionLevel.Optimal);
using (var stream = entry.Open())
{
byte[] data = readFile("target\\English.txt");
stream.Write(data, 0, data.Length);
}
entry = zip.CreateEntry("日本語.txt", CompressionLevel.Optimal);
using (var stream = entry.Open())
{
byte[] data = readFile("target\\日本語.txt");
stream.Write(data, 0, data.Length);
}
}
// 3.ファイルをそのままファイルシステムに展開する場合
ZipFile.ExtractToDirectory("target1.zip", "target1");
// 4.特定のファイルのみ展開する場合
using (ZipArchive archive = ZipFile.OpenRead("target2.zip"))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
// 4.1.ファイルに展開
if(entry.FullName == "日本語.txt")
{
entry.ExtractToFile("日本語.txt");
}
// 4.2.メモリ上に展開
if (entry.FullName == "English.txt")
{
using (Stream stream = entry.Open())
{
byte[] data = new byte[1000];
stream.Read(data, 0, 1000);
Console.WriteLine(Encoding.UTF8.GetString(data));
}
}
}
}