東方中央幻視台

瞼の裏に弾幕が飛び交う程度の能力 - 永夜抄Normalはそれなりに難しい。

目次

Blog 利用状況

ニュース

自己紹介

関連サイト

投稿カレンダー

  • スクリプトをダウンロード!

ブログパーツ

Adsense

書庫

日記カテゴリ

7-Zipを.NETアプリケーションから呼び出すと便利

.NETなアプリケーションで圧縮ファイルを圧縮、解凍する方法といえば、

  • SharpZipLibを使う
  • J#のZipFileクラスを使う
  • 統合アーカイバDLLをP/Invokeして使う

などの方法がありますが、どれも面倒だったり妙なバグがあって使いにくいです。

そこでお勧めしたいのが、7Zipの実行ファイルを呼び出す方法です。
7Zipはオープンソース(LGPL)で配布されているアーカイバで、独自の7Z形式のみならず、
Zip形式、GZip形式、BZip2形式の圧縮解凍やRar形式などの解凍にも対応しており、
アプリケーションに組み込んで使う分には十分な性能を持っています。
またライセンスもLGPLなので、EXEやDLLそのままでの再頒布にはソースコード公開などのペナルティがありません。

※間違っていたら訂正をお願いします。
※ただし7Zipそのものを改造した部分についてはGPLと同等の制限があります。

使い方(設置)

7-Zipの公式サイトから、ダウンロードのメニューを選択し、「7-Zip Command Line Version」と書かれているファイルをダウンロードし、解凍します。
プロジェクトに適当な名前のフォルダ(Exe、7Zipなど)を追加して解凍されたファイルをそこにコピーします。
コピーされたファイルを選択して、プロパティの「出力フォルダにコピー」の項目を「新しければコピー」にします。

使い方(呼び出し)

string sevenZipPath = Path.Combine(Application.StartupPath, @"Exe\7za.exe");
//Extract
Process.Start(sevenZipPath, string.Format(@"x -o""{0}"" ""{1}""", outDirPath, archiveFilePath).WaitForExit();
//Compress(Add to archive)
Process.Start(sevenZipPath, string.Format(@"a -tzip ""{0}"" ""{1}""", archiveFilePath, directoryPath).WaitForExit();

パラメータをいじくると一致する(しない)ファイルやフォルダのみ圧縮(解凍)などある程度融通を利かせられます。
詳しくはヘルプファイルを見てください。

投稿日時 : 2008年4月20日 19:24

コメントを追加

# re: 7-Zipを.NETアプリケーションから呼び出すと便利 2008/04/20 20:27 中博俊

アーカイバを内持ちするとセキュリティ脆弱性リスクが怖い

# re: 7-Zipを.NETアプリケーションから呼び出すと便利 2008/04/20 20:43 Hirotow

それは気になるところ。
置き換え対策としてはチェックサムを取るとかかなあ。

ちなみにバグのことだったらDLLでも同じ。

タイトル  
名前  
URL
コメント