2010年2月27日土曜日

内骨格 1.94 - UNLHA32.DLLの使い方

内骨格の 1.94 を公開した。
  • LZH の仮想ディレクトリの中のルートディレクトリのファイルを開くときに、間違って他のディレクトリの同じ名前のファイルを開いてしまうケースがあったのを修正。
  • コマンドラインの計算機で、long 型の整数を扱えるようにした。
  • W キーによる、ファイル名比較選択で、ファイル名の大文字小文字を区別せずに比較するようにした。

内骨格では、Pythonから、ctypes をつかって、統合アーカイバのDLLを使うようにしている。
(ただし、zip や tgz については、Pythonの標準ライブラリを使っているので、統合アーカイバを使用しない。)

    http://www.csdinc.co.jp/archiver/

"統合"といっても、アーカイブからファイルを1つ取り出すための処理は、DLLの種類ごとに
ことなっている。


内骨格のなかでは、 以下のようにしてアーカイバDLLに対応する。

-----------------------------------------------

class LhaArchiver(Archiver):
  
    def __init__(self):
        Archiver.__init__( self, "unlha32.dll", "Unlha", True )
      
    def extract( self, hwnd, filename, dst_dirname, name ):
  
        if type(filename)==type(''):
            filename = unicode(filename,'mbcs')

        if type(dst_dirname)==type(''):
            dst_dirname = unicode(dst_dirname,'mbcs')

        if type(name)==type(''):
            name = unicode(name,'mbcs')

        dst_dirname = os.path.normpath(dst_dirname)
        if dst_dirname[-1]!="\\":
            dst_dirname += "\\"

        cmdline = u'e -+1 -n1 "%s" "%s" "%s" -p' % ( filename, dst_dirname, name )
        #print cmdline
      
        buf = ctypes.create_unicode_buffer(1024)
        ret = self._call( None, cmdline, buf, 1024 )
        if ret : raise ArchiverError(ret)

-----------------------------------------------


今回の修正は、cmdline の文字列に、-p を付け加えた、というものだ。

UNLHA32.DLLのドキュメントを見たら、コマンドのオプションがたくさんあって、
正直、使い方が正しいのか自信がない。
 

2 件のコメント:

  1. 内骨格、いつも愛用させていただいております。

    zipファイルの展開で質問がございます。
    zipファイルをUキーで展開する際、

    アーカイブ展開 : ~.zip :
    Traceback (most recent call last):
    File "cfiler_threadutil.pyo", line 173, in run
    File "cfiler_mainwindow.pyo", line 5947, in __call__
    File "cfiler_mainwindow.pyo", line 5976, in extractZip
    NameError: global name 'name_unicode' is not defined
    Done.

    というエラーが出ます。
    ソースを拝見した限り、
    cfiler_mainwindow.py line 5976
    name_unicode → unicode_name
    の変数名エラーかと思います。
    ご確認いただけますでしょうか。

    よろしくお願いいたします。

    返信削除
  2. k-uraki さん、レポートをありがとうございます。
    次回のアップデートで修正しようと思います。

    返信削除