ZIPファイルを展開、解凍する - DotNetZip を利用 - C#

DotNetZipを利用して、ZIPファイルを展開するコードを紹介します。
補足
.NET Framework 4.5 以降では.NET Framework の標準ライブラリのZipArchiveクラスを利用して展開処理を実装できます。詳細はこちらの記事を参照してください。

DotNetZipのダウンロード

DotNetZipのライブラリをダウンロードします。ダウンロードの手順等はこちらの記事を参照してください。

アセンブリの参照

DotNetZipライブラリの"Ionic.Zip.dll"ファイルの参照を追加し、Ionic.Zipアセンブリを参照します。詳しい手順はこちらの記事を参照してください。

UI

下図のUIを作成します。フォームにボタン、テキストボックス,OpenFileDialogを配置します。

コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Ionic.Zip;

namespace ZipExtract
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
        MemoryStream ms = new MemoryStream();
        StreamWriter sw = new StreamWriter(ms);

        ReadOptions options = new ReadOptions();
        options.StatusMessageWriter = sw;
        ZipFile zf = ZipFile.Read(openFileDialog1.FileName, options);

        string extractPath = Path.GetDirectoryName(openFileDialog1.FileName)
          + "\\" +Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
        zf.ExtractAll(extractPath);

        ms.Seek(0, 0);
        StreamReader sr = new StreamReader(ms);
        string msg = sr.ReadToEnd();
        textBox1.Text += msg +"\r\n";

        textBox1.Text += "処理が終了しました。\r\n";
      }
    }
  }
}

解説

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。[ファイルを開く]ダイアログが表示されます。展開したいzipファイルを選択して開きます。


ファイルの展開が始まります。展開が終了すると処理が終了した旨のメッセージが表示されます。


zipファイル内にディレクトリ階層がある場合はメッセージが表示されます。


ZIPファイルと同じディレクトリにzipファイルの名前と同じフォルダが作成され、zipファイルの展開結果がフォルダ内に配置されます。


ファイルが展開されていることが確認できました。


DotNetZipを用いてzipファイルを展開することができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-05-08
作成日: 2013-07-31
iPentec all rights reserverd.