ファイルのZip圧縮とZipファイルの解凍

ファイル/フォルダ

今回は、Zip圧縮について説明しようと思います。

ファイル圧縮することでファイルサイズを小さくできたり、たくさんのファイルを1つのファイルにしたりと便利です。

準備

ソリューションエクスプローラーにて参照のを右クリックして参照の追加を選択します。

System.IO.Compression.FileSystemにチェックします。

これで準備はできました。

usingを追加

ソースファイルの先頭にusingを入れてください。

using System.IO.Compression;

フォルダをZip圧縮する

今回はZipFileクラスを使って圧縮していこうと思います。

圧縮処理を行います。ZipFile.CreateFromDirectoryを使い圧縮処理をします。

//圧縮するフォルダを取得
string input_path = "";
using (FolderBrowserDialog dlg = new FolderBrowserDialog())
{
    if (dlg.ShowDialog() != DialogResult.OK)
    {
        //OK以外は処理を抜ける
        return;
    }
    input_path = dlg.SelectedPath;
}

//出力先を取得
string output_path = "";
using (SaveFileDialog dlg = new SaveFileDialog())
{
    dlg.Filter = @"Zipファイル(*.zip)|*.zip";

    if (dlg.ShowDialog() != DialogResult.OK)
    {
        //OK以外は処理を抜ける
        return;
    }
    output_path = dlg.FileName;
}

//ZIP書庫を作成
ZipFile.CreateFromDirectory(input_path, output_path, CompressionLevel.Optimal, false, System.Text.Encoding.GetEncoding("shift_jis"));

inputフォルダ(input_path)をsample.zip(output_path)という名前でzip圧縮しました。

注意点として圧縮するフォルダの中にZipファイルを出力することはできません。
この場合、input_pathのフォルダ内にZipファイルは作れないということです。

Zipファイルを解凍する

解凍する処理です。ZipFile.ExtractToDirectoryを使い解凍を行います。

//Zipファイルを取得
string input_path = "";
using (OpenFileDialog dlg = new OpenFileDialog())
{
    dlg.Filter = @"Zipファイル(*.zip)|*.zip";

    if (dlg.ShowDialog() != DialogResult.OK)
    {
        //OK以外は処理を抜ける
        return;
    }

    input_path = dlg.FileName;
}

//出力先を取得(Zipファイルと同じフォルダ)
string output_path = System.IO.Path.GetDirectoryName(input_path);

//ZIP書庫を作成
ZipFile.ExtractToDirectory(input_path, output_path, System.Text.Encoding.GetEncoding("shift_jis"));

//メッセージ出力
MessageBox.Show("処理完了");

実行した結果です。
左がWinRARでZipファイルの中身を確認した状態です。
右が実際に上の処理を実行して解凍した結果です。

まとめ

今回は、基本的な圧縮と解凍のみに焦点を置いています。ZipFileクラスは、ほかにもZipファイルの編集も行えるので、それはまたの機会に紹介します。

この記事が皆様のお役にたてたら幸いです。

コメント

タイトルとURLをコピーしました