【C#.NET解説】ZipArchiveクラスの使い方と圧縮・解凍の実践的ガイド

2024年11月17日日曜日

パス・ディレクトリ ファイル操作 基本

t f B! P L

名前空間 System.IO.Compression

自己紹介

こんにちは。私は癒しと再生を司る存在。今日は、ファイル操作の世界を癒し、整える「ZipArchiveクラス」についてお話しましょう。このクラスは、圧縮や解凍といった処理を簡単に扱える非常に便利な道具です。私と一緒にその使い方を見ていきましょうね。

基本機能

ZipArchiveクラスは、圧縮されたZIPファイルを操作するためのクラスです。これを使うと、ファイルの追加、削除、解凍などが簡単に行えます。以下の例では、ZIPファイル内のファイルリストを取得して表示する方法を示します。

C#
using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main()
    {
        string zipPath = "example.zip";

        using (ZipArchive archive = ZipFile.OpenRead(zipPath))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                Console.WriteLine($"ファイル名: {entry.FullName}, サイズ: {entry.Length}バイト");
            }
        }
    }
}

このコードでは、ZIPファイル内のエントリを列挙し、それぞれの名前とサイズを表示します。

よく使う場面と注意点

ZipArchiveクラスは、バックアップやデータの圧縮を効率的に行いたい場合に便利です。ただし、パスワード付きのZIPファイルには対応していないため、その点に注意が必要です。以下は、ZIPファイルを解凍する例です。

C#
using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main()
    {
        string zipPath = "example.zip";
        string extractPath = "extracted";

        try
        {
            ZipFile.ExtractToDirectory(zipPath, extractPath);
            Console.WriteLine("解凍が完了しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"エラー: {ex.Message}");
        }
    }
}

このコードは、指定したZIPファイルを解凍します。

圧縮と解凍を効率化するメソッド

ZipArchiveクラスには、圧縮率を調整するオプションがあります。主に以下の3種類があります:

  • CompressionLevel.Optimal: バランスの取れた圧縮率と速度を提供します。
  • CompressionLevel.Fastest: 圧縮速度を優先しますが、ファイルサイズはやや大きくなります。
  • CompressionLevel.NoCompression: 圧縮を行わずにファイルをそのまま保存します。

以下の例では、高圧縮率で新しいZIPファイルを作成する方法を示します。

C#
using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main()
    {
        string zipPath = "compressed.zip";
        string filePath = "file.txt";

        using (FileStream zipToOpen = new FileStream(zipPath, FileMode.Create))
        using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
        {
            ZipArchiveEntry entry = archive.CreateEntryFromFile(filePath, Path.GetFileName(filePath), CompressionLevel.Optimal);
            Console.WriteLine($"{entry.FullName} を圧縮しました。");
        }
    }
}

このコードでは、指定したファイルを高圧縮率でZIPファイルに追加します。

具体的な使い方

次に、フォルダ全体をZIPファイルに圧縮する例を見てみましょう。

C#
using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main()
    {
        string folderPath = "exampleFolder";
        string zipPath = "folder.zip";

        try
        {
            ZipFile.CreateFromDirectory(folderPath, zipPath, CompressionLevel.Fastest, false);
            Console.WriteLine("フォルダを圧縮しました。");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"エラー: {ex.Message}");
        }
    }
}

このコードは、指定したフォルダをZIPファイルとして圧縮します。

その他の便利なメソッド

ZipArchiveクラスには、以下のような便利なメソッドがあります。

  • CreateEntry: ZIPファイルに新しいエントリを作成
  • DeleteEntry: ZIPファイルからエントリを削除
  • Open: ZIPファイルを開く

以下に、新しいエントリを作成する例を示します。

C#
using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main()
    {
        string zipPath = "example.zip";

        using (FileStream zipToOpen = new FileStream(zipPath, FileMode.OpenOrCreate))
        using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
        {
            ZipArchiveEntry entry = archive.CreateEntry("newFile.txt");
            using (StreamWriter writer = new StreamWriter(entry.Open()))
            {
                writer.WriteLine("新しいファイルをZIPに追加しました。");
            }
            Console.WriteLine($"{entry.FullName} を作成しました。");
        }
    }
}

このコードは、新しいエントリをZIPファイルに追加します。

このブログを検索

QooQ