■ はじめに
C#でZIP圧縮・解凍をするサンプルプログラムを書く* ZIPに関する記述は、以下を参照のこと
https://blogs.yahoo.co.jp/dk521123/20103286.html
* 以下は、かなり参考になったサイト
http://journal.mycom.co.jp/articles/2009/08/21/DotNetZip/001.html
■ 実装方法
準備
1. 以下のサイトから、DotNetZipをダウンロードするhttp://dotnetzip.codeplex.com/
2. VisualStudioにおいて、[DotNetZip-v1.9]-[Release]-[Ionic.Zip.dll]を「参照の追加」を行う
■ サンプル
例1:ZIP圧縮をメソッド化
#region Zip圧縮処理 /// <summary> /// Zipファイルを圧縮する /// </summary> /// <param name="path1">圧縮対象のディレクトリ</param> /// <param name="path2">出力先のZIPファイルまでのパス</param> /// <remarks> /// [参考にしたWeb] /// http://journal.mycom.co.jp/articles/2009/08/21/DotNetZip/index.html /// </remarks> private void CompressZip(string path1, string path2) { using (ZipFile zip = new ZipFile(Encoding.GetEncoding("Shift_JIS"))) { // 圧縮レベルを設定 zip.CompressionLevel = CompressionLevel.BestCompression; // ファイルを追加 zip.AddDirectory(path1); // ZIPファイルを保存 zip.Save(path2); } } #endregion
例2:ZIP解凍をメソッド化
#region Zip解凍処理 /// <summary> /// Zipファイルを解凍する /// </summary> /// <param name="sourcePath">解凍対象元のパス</param> /// <param name="destPath">解凍先のパス(一時的に解凍するパス)</param> private void UncompressZip(string sourcePath, string destPath) { using (ZipFile zip = ZipFile.Read( sourcePath , Encoding.GetEncoding("Shift_JIS") // 日本語を使用している場合、Shift-JISを指定する )) { // 解凍処理 zip.ExtractAll(destPath); } } #endregion
例3:ダイアログで指定したフォルダ内のZIPを全て解凍する
環境:VS2010using System; using System.Text; using System.Windows.Forms; using System.IO; using Ionic.Zip; #region 「処理実行」ボタン押下後 /// <summary> /// 「処理実行」ボタン押下後 /// </summary> private void buttonRun_Click(object sender, EventArgs e) { string selectPath = null; try { string selectPath = string.Empty; DialogResult result = this.folderBrowserDialog1.ShowDialog(); if (result == DialogResult.OK) { if (Directory.Exists(this.folderBrowserDialog.SelectedPath)) { selectPath = this.folderBrowserDialog.SelectedPath; } else { return; } } else { return; } if (!string.IsNullOrEmpty(selectPath)) { // 提出モードの処理を実行する this.UnCompress(selectPath); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion #region 解凍処理 /// <summary> /// 解凍処理を実行する /// </summary> /// <param name="path">ユーザが選択したフォルダまでのパス</param> /// <param name="extention">解凍対象の拡張子(例:"*.gz")。デフォルトは"*.zip"</param> private void UnCompress(string path, string extention = "*.zip") { DirectoryInfo directoryInfo = new DirectoryInfo(path); string savePath = this.CreateFolder(directoryInfo); // ディレクトリ内にある解凍対象を解凍する foreach (FileInfo fileInfo in directoryInfo.GetFiles(extention)) { this.UncompressZip(savePath, fileInfo); } } #endregion #region Zip解凍処理 /// <summary> /// Zipファイルを解凍する /// </summary> /// <param name="savePath">保存先のパス</param> /// <param name="fileInfo">ユーザが指定したディレクトリ</param> private void UncompressZip(string savePath, FileInfo fileInfo) { using (FileStream inFile = fileInfo.OpenRead()) { string currentFile = fileInfo.FullName; using (ZipFile zip = ZipFile.Read(currentFile , Encoding.GetEncoding("shift-jis") // 日本語を使用している場合、Shift-JISを指定する )) { foreach (ZipEntry e in zip) { // 解凍処理 e.Extract(uncompressPath); } } } } #endregion
関連記事
Java
ZIP 処理 ~圧縮編~https://blogs.yahoo.co.jp/dk521123/33497835.html
ZIP 処理 ~解凍編~
https://blogs.yahoo.co.jp/dk521123/33645352.html
C#
C#でZIPに圧縮・解凍についてhttps://blogs.yahoo.co.jp/dk521123/20103286.html