zip形式のアーカイブのはまりポイント

zipファイルのメタデータは基本的にファイルのいちばん後ろにかたまって置いてある。でもzipファイルによっては実は前から読み込めたりする。これはzipファイル内のフォルダ構造を取得できるとかいう意味ではなくて、一番前にあるファイルから順番に読み込むことができるという意味。問題なのはできるのとできないのがあること。

zip内のファイルひとつひとつはlocal file headerというヘッダーとそれに続く圧縮されたファイル本体データを持つ。実はlocal file headerのcrc32チェックサムと圧縮されたファイルサイズ、圧縮前のファイルサイズは必ず設定しなければいけないということはない。local file headerで設定しない場合は[local file header, ファイル本体, ファイルの詳細]みたいに並べる。ファイルの詳細の部分にはファイルサイズなど、上で書いたようなデータが入っている。オフセット操作でファイルを辿ろうとすると後者の場合はエラーとなる。

結局のところ、正しくデータを読み込みたければファイルの一番後ろから読みこみめばいいんだけど、これできそうじゃんみたいな期待感をもたせやがってという気持ちにはなるよなー。まぁ、仕様書ちゃんと読めって話だけど。

参考:
http://www.pkware.com/documents/casestudies/APPNOTE.TXT


posted by 右京 | 雑記
blog comments powered by Disqus
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。