[BlueLeaf1336]> PROBLEMS> ZippyRace>

ZippyRace > 特定フォルダ内の Zip ファイルを解凍解凍また解凍

historyTOP

2005/10/22:作成
2005/10/26:更新

overviewTOP

ある条件下では、特定のフォルダ内に大量に Zip ファイルが蓄積されていくことがあります。また、これらの Zip ファイルは別に解凍に失敗したところでどうでもよいし、解凍した後は Zip ファイルを捨てるのに吝かでなく、どちらかといえば積極的に捨てていきたい。できることなら勝手に Zip ファイルを解凍解凍また解凍して解凍に成功したら(あるいは失敗しても)、Zip ファイルを捨てて捨ててまた捨てる、そういうプログラムを作ります。

Zip ファイルのフォーマットを独習 Zip して、いちから解凍してやるぜ、というのも魅力的ですが、そういうことを始めるとすぐに飽きてしまうので、上記サイトを参考に、手軽にすばやくそして適当にやっつけることにします。ただ、コンポーネントや、独自の DLL というのはどうもあれなので、ユニット形式の上段 2 つあたりで考えます。

希望としては

という感じです。主に、Irvine がなぜか大量にダウンロードしてきた Zip ファイルを手間なく展開してやろうと、そういう感じです。

2005/10/22TOP

しばらく考えた後、Delphiで簡単にLZH/ZIP/CABの圧縮と解凍を行う でダウンロードさせていただけるユニットを利用させていただくことにさせていてだきます。と思ったら、圧縮ファイルに含まれていない「unit_windows_api, unit_string」というユニットを uses しているようです。いやん。妄想と想像でこれらのファイルを使用しないように修正してみます。

とか何とかやっているうちに、クラス化してみたりうにゃうにゃとやってかなり触ることになってしまっていました。

20051022ZippyRace.zip(187,128bytes) 実行ファイルとソースコードです。※ 改めて言及しておきますが、Delphiで簡単にLZH/ZIP/CABの圧縮と解凍を行う でもらったソースコードをかなりパクッてます。おまけに、対応している DLL が、バージョンダウンはなはだしく、「Cab32.dll」「UnLha32.dll」「7-Zip32.dll」の 3 つになりました。オリジナルは「Zip32.Dll」「UnZip32.Dll」にも対応しています。でも、逆にいえば最初の 3 つだけであれば、外国の方が書かれた .pas を使う必要すらないのである意味よいかも。それに「統合アーカイバ DLL 最新版かき集めツール caldix」を使っていますので、「7-Zip32.dll」って何? なんて考える必要もなく使えています。

パスワード付き Zip の解凍にも興味があるんですが、このページの最初の気持に立ち戻ってみると、大量の Zip ファイルを楽に勝手に解凍解凍また解凍したいなぁ、なわけですんで「7-Zip32.dll」で充分とすることにします。

だいたい、圧縮機能なんて全く関係無いにもかかわらず勢いでそれなりに動くように書いたりして横道にそれてしまったので、軌道修正します。が、今日はここまで。

ただ、残っている方がよほど多いんですが、考え方だけでも忘れないうちに書いておきます。

2005/10/26TOP

20051026ZippyRace.zip(218,719bytes) 実行ファイルとソースコードです。

このプログラムを使うとこんな感じになります。で、何も考えずに同階層にぶちまけます。

BeforeAfter

ファイルの構成に意味のあるような解凍には使ってはいけません。いや、使ってもかまいませんが知りません。圧縮ファイルも消してしまって、階層構造もフラットにしちゃってニッチもサッチも行かなくなること請け合いです。

想定する用途は色物です。久しぶりに役に立ちそうな、育てたくなるようなプログラムを作ったつもりになってますが、動機は色です。圧縮された 001.wmvIrvine の力を借りて !C54A7C0F__001.zip という感じのファイル名で大量に同じフォルダに発生した時に、個別に解凍しないと「上書きしますか?」の嵐。さあどうする? という問いに対する回答です。

EOFTOP