C#でZipファイルを扱うサンプル

C# コンピュータ
C#

.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を参照するようにしてください。

コメント