著作一覧 |
Lhaってコマンドでしか無いからsystemとか呼ぶことなる。でも、同じスクリプトでUnixでもMacでもWindowsでも動かしたい場合は厄介だ。だから拡張ライブラリになってりゃ便利だろう。
で、こんなのを考える。
require 'lhalib' LhaLib::open('foo.lzh').each do |unpacked_file| s = unpacked_file.read # unpacked_file is IO instance end ...
openで、展開する。配列を返す。いまさら、わざわざLhaとか使って圧縮する人はいないだろうから、展開だけで十分だろう。展開するパスはopenメソッドの第1引数で指定されたファイルと同じディレクトリとする。上の例では配列の中をFileのインスタンスにしているけど、これでは開いたファイルが多すぎて死ぬ場合もありえるから、展開後のパス名(=String)のほうが良いかも。open_each('foo.lzh') do |x| の場合にFileのインスタンスという手もあるか。
では、作ろうかと思って(僕には圧縮関連のアルゴリズムに関する知識はまったくないわけで)Lha関連のソースを探す。
オリジナルの吉崎さんのソースは、Vectorにあった。が、ライセンスがなんか面倒くさい。でも再構成した場合については自由みたいだからまあありかな。でもアセンブリ言語で書かれた部分をCにトランスレートするのはやだな。
Lha for Unixのソースは、sourceforge.jpだ(新井さんがメンテされてるのか)。うぐ、こっちのライセンスはもっとやっかいだ。派生物はLHaと名乗ってはいけないようだが、LhaLibなら良いだろう。商利用についてはむちゃくちゃが書いてある(組み込んだり派生したものの配布先が商利用する場合について不明瞭なのはともかくとしても)。使用者として不適切と判断したらだめとか書いているが、そんなものわかるもんか。っていうか、相当多数のLinuxパッケージにLHaは組み込まれているように思うが、このライセンスまったく守られてないだろ。いや、ディストリビュートするだけでは商利用に含まれないのかも。まったくもって玉虫色だ。
この時点ですっかりやる気がなくなっているわけだが、ソースを見るとライブラリ的に利用するには相当手を入れなきゃなら無そうでこれもちょっとやる気が削がれる。アルゴリズム抜きに単にライブラリ化技術だけでやっつけようとしているわけだから、何か変なことになっても直せないからだ。
さて、能書きは書いたからやるとするか。
ジェズイットを見習え |
7-zipの様な独自エンジンでさまざまな形式に対応しているものをとってきた方が、ライセンス的にはっきりしてますし、一手間で色々な形式に対応できてうれしいのでは。
役に立つかどうかわかりませんが,参考までに.<br>まだ移植しやすさそうかな.ライセンスも他のヤツよりだいぶいいようです.<br>LHA Library for Java:<br>ttp://homepage1.nifty.com/dangan/Content/Program/Java/jLHA/LhaLibrary.html
どうもありがとうございます。<br>7-zip ってのは知りませんでした。<br>http://sourceforge.net/projects/sevenzip/<br>確かに、このほうが良いですね。RAAにもRubyForgeにも無いし(と思って一瞬乗り気になったけど、これも分離してないのか……ちょっと保留)。<br>keisukenさんのは、Rjbで使う感じかなぁ。
よくみたら分離されてますね > 7-zip (ソース見ないとだめだなやはり)<br>しかも、各アーカイバはCOMのインターフェイス(IArchive)を持ってるし、これは好きだな。逆にUnix側が問題なのか……
Unix向けですと p7zip http://p7zip.sourceforge.net/ でしょうか。ソースは見ていないのですが、これならUnixにも対応するかと