圧縮アルゴリズム(1)
 zip形式にはデータの圧縮ができるのは周知の通りですが、標準的なzip圧縮はDeflateアルゴリズムで行われるのが一般的です。仕様ではBzip2やPPMdといった、そのほかの圧縮方法もいろいろと利用可能なのですが、「そういった圧縮方法を使うのなら全く別のファイルフォーマットにしたほうがわかりやすい」という考え方からなのか、あまり使われることはありません。ちなみに、LHAとZIP―圧縮アルゴリズム×プログラミング入門で紹介されているzipファイル作成プログラムでも、Deflateアルゴリズムが使われています。

 Deflateアルゴリズムには権利に関する問題がないため、非常に多くのファイルに使われており、zipファイル以外にも、かつてあった特許権に関するトラブルを避けるためインターネットでGIFの代わりに使われるようになったPNGファイルや、フラッシュムービー(swf)でも、データの圧縮にはこのアルゴリズムが採用されています。アルゴリズム自体の解説はLHAとZIP―圧縮アルゴリズム×プログラミング入門に譲って、ここでは、Deflateアルゴリズムのオープンソースライブラリ「zlib」の力を借りて圧縮zipを作成したいと思います。

 zlibの公式サイトで配布されているコンパイル済みライブラリはVisual C++ 6.0と古いコンパイラで作成されているのため、最新のコンパイラでソースコードからコンパイルしたライブラリを用いることにします。

 zlibのサイトからからダウンロードしたソースコードのアーカイブファイルを展開したファイル群の中から「projects\visualc6\zlib.dsw」をダブルクリックします。すると、プロジェクトファイルの変換を促すメッセージが表示されるので、「すべてはい」を選択してVisual C++ 2008形式のプロジェクトファイルへの変換を行ってください。

zlibソースコードのダウンロード

dswプロジェクトを選択

プロジェクト変換の実行

 このままでは、コンパイル時に警告が発生するので、続いてはそれらに対する修正を行います。

 プロジェクトのプロパティページより「C/C++→プリプロセッサ→プリプロセッサの定義」に、「_CRT_SECURE_NO_DEPRECATE」を追加して、「strcpyの代わりにstrcpy_sを使ってください」といった警告を抑止します。

_CRT_SECURE_NO_DEPRECATE

 もし、Visual C++ 2008ランタイムライブラリを別途インストールするタイプにしたくないのであれば、「C/C++→コード生成→ランタイムライブラリ」の項目の「マルチスレッドDLL/マルチスレッドデバッグDLL」を「マルチスレッド/マルチスレッドデバッグ」に置き換えます。

ランタイムライブラリの変更

 ちなみにDLL形式のzlibにおいては、「odbc32.lib」などのリンクを省いても問題ありません。あとはVisual Studioからビルドを行えば、「Win32_LIB_Release」フォルダにスタティックライブラリバージョンが、「Win32_DLL_Release」にはダイナミックライブラリバージョンが生成されます。