今回は、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ファイルの編集も行えるので、それはまたの機会に紹介します。
この記事が皆様のお役にたてたら幸いです。
コメント