とある日の妄想

- 慢心は己の敵 -

何気ない日常にふと思いついた世迷言をつづるブログ

 

rss

■携帯版はこちら
http://blog.toaruhi.net/m/

携帯サイトQRコード

ブログ内検索

キーワード

 

※検索エンジンで検索した情報が見当たらない場合にご利用ください。

新着記事

カテゴリ一覧

外部リンク

作者について

2003年09月17日(火)
慢心は己の敵
プログラミング
油断すると、とり憑かれるね〜ほんとに。どんな物事でもそうだと思うけど、慣れてきたときが一番危ないっていうのはこういうことなんだろうな。常に冷静に、客観的に自分をみることができるようにつとめよう。

それはともかくCJZip(0.7以前)に意外と大きな問題点があった。
ディレクトリを圧縮すると、StuffIt Expanderで解凍できない。ファイルのみをドロップした場合は解凍できるんだけど、ディレクトリを含むアーカイブを解凍すると、ディレクトリの中身が空になってしまう。

どうしてかは、結局良く分からなかった。JavaのZip関連のクラスを使ったサンプルを掲載しているサイトも、Windows系の解凍ソフトでうまく解凍できないという問題について触れているところがいくつかあった。どれをみても、残念ながら、これだ!という解決策は見当たらなかった。

で、俺がとった解決策は、ディレクトリをアーカイブに追加するときは

ZipOutputStream.setMethod(ZipOutputStream.STORED)

とし、ファイルのときは

ZipOutputStream.setMethod(ZipOutputStream.DEFLATED)

とする。そしてディレクトリエントリの書き込みをする前に

ZipEntry.setCrc(0)

として、CRC32情報をエントリに設定しておく。なぜかは分からないが、setCrcは圧縮メソッドがSTOREDでないとファイルにデータとして記録できないようだ(ただし、その場でエントリからgetCrcなどを使って読み出せば、DEFLATEDでも設定値が読み出せる)。setSizeなども同様だった。

ファイルを圧縮するときもSTOREDにすればCRC32は書き込めるが、ファイル自体が圧縮されないまま格納されているような感じで、ファイルサイズが変わらないので、実用的でない。

とりあえず上記の方法で、StuffIt Expander(Mac)、解凍レンジ(Win)、Lhasa+(Win)で解凍できることを確認した。ファイルへのCRC32設定などについては、引き続き調べていきたいと思う。





トラックバックURL

コメントを投稿する

名前
コメント






テクノラティお気に入りに追加する