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 »
「05 Visual C#」カテゴリの記事
- ClickOnceの発行でエラー(2009.05.21)
- C# Flash(2008.08.21)
- 読みたいだけなのに・・・(2008.05.20)
- 抽象クラスとインターフェイス(2007.09.03)
- ClickOnce(2007.09.01)
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/196474/13055521
この記事へのトラックバック一覧です: C#でzip圧縮を行う :
» ASP.NET でZIPファイルを作成。覚え書き [北青山通信 - from aoyama]
ASP.NETでZIPで圧縮して、ダウンロードさせるプログラムを作成。その覚え書き。
ASP.NETでZIPファイルを作成することは、いくつか方法があるが、今回は、ZIP32j.DLLを呼び出して実現すること... [続きを読む]
« C#で圧縮ファイルを生成する | トップページ | Microsoft Visual Studio .NET 2003 Service Pack 1 »


コメント