« C#で圧縮ファイルを生成する | トップページ | Microsoft Visual Studio .NET 2003 Service Pack 1 »

2006年12月18日 (月)

C#でzip圧縮を行う

Visual Studio 2003のC#を使ってzip圧縮を行う方法。J#のライブラリを使ってもzip圧縮を行うことができるようですが、日本語のファイル名を扱えないというので、統合アーカイバプロジェクトのzip32j.dllを使用した方法のサンプルです。
まずはzip32j.dllのラッパークラスを作成します。統合アーカイバプロジェクトで推奨されているバージョンチェックは行っていません。

using System;
using System.Runtime.InteropServices;

namespace winApp.Utility
{
  /// <summary>
  /// Zip形式で圧縮をします
  /// </summary>
  public sealed class Zip32
  {
    private Zip32()
    {
      
    }

    /// <summary>
    /// バージョンの取得
    /// </summary>
    /// <returns></returns>
    [DllImport("zip32j")]
    private extern static UInt16 ZipGetVersion();
   
    /// <summary>
    /// DLLの実行状況の取得
    /// </summary>
    /// <returns></returns>
    [DllImport("zip32j")]
    private extern static bool ZipGetRunning();

    /// <summary>
    /// 書庫ファイルの作成
    /// </summary>
    /// <param name="hWnd"></param>
    /// <param name="szCmdLine"></param>
    /// <param name="szOutput"></param>
    /// <param name="dwSize"></param>
    /// <returns></returns>
    [DllImport("zip32j")]
    private extern static int Zip(int hWnd, string szCmdLine, string szOutput, int dwSize);

    /// <summary>
    /// コマンドライン用にファイル名を検証します
    /// </summary>
    /// <param name="filename"></param>
    /// <returns></returns>
    private static string _checkFileName(string filename)
    {
      if(filename.IndexOf(' ') > 0)
      {
        return string.Format("\"{0}\"", filename);
      }
      else
      {
        return filename;
      }
    }

    /// <summary>
    /// zipファイルを生成します
    /// </summary>
    /// <param name="zipname">zipファイル名</param>
    /// <param name="fileFilter"></param>
    /// <returns></returns>
    public static bool archive(string zipname, string fileFilter)
    {
      if(Zip32.ZipGetRunning())
      {
        return false;
      }
      else
      {
        string cmdline = string.Format("-rj {0} {1}",
          Zip32._checkFileName(zipname), Zip32._checkFileName(fileFilter));
        int ret = Zip32.Zip(0, cmdline, null, 0);
        return (ret == 0);
      }
    }
  }
}

呼び出し側のクラスでメソッドを呼び出すとzipファイルを生成します。

winApp.Utility.Zip32.archive(@"C:\test\test.zip", @"C:\text\*.txt");

上記のクラスではディレクトリ名を含まずにzipファイルを生成します。
改良する場合はcmdlineのスイッチを変更して下さい。
コマンドの詳細はダウンロードしたzip32j.dllのCMD_ZIP.TXTを参照してください。

« C#で圧縮ファイルを生成する | トップページ | Microsoft Visual Studio .NET 2003 Service Pack 1 »

03 programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: C#でzip圧縮を行う:

» ASP.NET でZIPファイルを作成。覚え書き [北青山通信 - from aoyama]
ASP.NETでZIPで圧縮して、ダウンロードさせるプログラムを作成。その覚え書き。 ASP.NETでZIPファイルを作成することは、いくつか方法があるが、今回は、ZIP32j.DLLを呼び出して実現すること... [続きを読む]

« C#で圧縮ファイルを生成する | トップページ | Microsoft Visual Studio .NET 2003 Service Pack 1 »

フォト

最近のトラックバック

無料ブログはココログ