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