板 1- 前 次 新 レス
管理人の雑記
[9]管理人 ★:06/06/10 22:55 ID:???
統合アーカイバDLL呼び出し関数群
lukewarm.s101.xrea
作った。
統合アーカイバDLLには、UnLHA32.dllなら「Unlha()」、7-zip32.dllなら「SevenZip()」のような関数があり、
「x arc.zip c:\output\ *.txt」のようなコマンド文字列を渡して解凍を行える。
アーカイブファイル内のファイルの情報を得るには、「UnlhaOpenArchive()」でファイルを開き、
「UnlhaFindFirst()」、「UnlhaFindNext()」でファイルを検索し、「UnlhaGetName()」などで情報を取得する。
「Unlha」や「SevenZip」などの関数名プレフィクスはDllごとに固有だが、取得するための関数などは用意されていないため、
あらかじめ対応関係の情報を用意しておく必要がある。
まとまった情報がないので、caldixによって保存されていたドキュメントを一つずつ読みながら頑張って調べることに。
Tar系の拡張子が大量にあって面倒くさい。見覚えのない形式は面倒なんで無視した。
統合と言っても標準仕様があるわけではなく、どの機能なら確実に実装されているのかよく分からなかったが、
とりあえずそれっぽい物だけ実装した。
圧縮ファイルの作成やファイルの解凍は「Unlha()」などの関数にコマンド文字列を渡して実行するらしい。
とりあえず、「a」コマンドで圧縮を行う関数と「x」コマンドで解凍を行う関数を用意した。
FindFirst/FindNextには構造体でファイル情報を得る機能があるらしいが、
一部のドキュメントでは非推奨となっていたので、GetNameなどで別途取得することに。
とりあえずZIP,LHA,CABあたりでは動作しているようである。
サンプルとして、圧縮ファイル内のファイルの一覧をListViewで表示するスクリプトを作ることに。
FindFirst/FindNextでは、階層構造にかかわらずに検索が行われるため、自前で階層構造を判別しなくてはならない。
階層の区切り文字の駄目文字問題とか色々と面倒なんで、解凍レンジやLhazなどのように全ファイルを一気に表示することにした。
また、リストビュー項目をダブルクリックしたときに一時ファイルに解凍して実行する機能と「全て解凍」ボタンを付けた。
前 次