.Netのライブラリを使うとzipファイルの作成や展開だけでなく、通常のファイルシステムの様にzipアーカイブ内のファイルの読み書きが出来たりします。
基本的な機能をサンプルとして書き起こしてみました。
using System;
using System.IO;
using System.IO.Compression;
// コンパイル
// csc /t:exe /r:System.IO.Compression.dll /r:System.IO.Compression.FileSystem.dll ZipFileSample.cs
/// <summary>
/// Zipファイル関連のサンプル
/// </summary>
class ZipFileSample
{
/// <summary>
/// エントリポイント
/// </summary>
static void Main()
{
// ディレクトリの作成
string dir = @".\test";
if (Directory.Exists(dir) == true)
{
Directory.Delete(dir, true);
}
Directory.CreateDirectory(dir);
// テキストファイルをローカルファイルに保存
string localFile = Path.Combine(dir, @"sample1.txt");
using(var sw = new StreamWriter(localFile))
{
sw.WriteLine("Foo");
}
// zipファイルを新規作成しディレクトリを追加
string zipFile = @".\sample.zip";
if (File.Exists(zipFile)) File.Delete(zipFile);
ZipFile.CreateFromDirectory(dir, zipFile);
// ローカルファイルの削除
File.Delete(localFile);
// zipファイルを更新モードで開く
using (var zip = ZipFile.Open(zipFile, ZipArchiveMode.Update))
{
// テキストファイルを追加
var entry = zip.CreateEntry(@"sample2.txt");
using(var sw = new StreamWriter(entry.Open()))
{
sw.WriteLine("Bar");
};
};
// zipファイルを読み込みモードで開く
using (var zip = ZipFile.OpenRead(zipFile))
{
// ファイルの一覧を取得
foreach(var x in zip.Entries)
{
Console.WriteLine("{0}\\{1}", zipFile, x);
}
// 二つ目のファイルを読み込み
var entry = zip.GetEntry(@"sample2.txt");
var line = "";
using (var sr = new StreamReader(entry.Open()))
{
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
// zipファイルからファイルを取り出し
ZipFile.ExtractToDirectory(zipFile, dir);
}
}
結果
.\sample.zip\sample1.txt
.\sample.zip\sample2.txt
Bar
コンパイル時オプションで/r:System.IO.Compression.dll /r:System.IO.Compression.FileSystem.dll
を参照するようにしてください。
コメント