メモリの圧縮ファイルをメモリ上に展開する – プログラミング – Home

メモリの圧縮ファイルをメモリ上に展開す...
 
通知
すべてクリア

[解決済] メモリの圧縮ファイルをメモリ上に展開する


田中さん
 田中さん
(@田中さん)
ゲスト
結合: 19年前
投稿: 49
Topic starter  

開発環境 VisualC++ SDK開発 Windows2003Server

以前UNLHA32.DLLを使ってファイルの解凍処理で、
インターネットからダウンロードしたlzhファイルをディスクに保存後、
保存したデータを解凍するという手順で解凍しています。

このままでもOKなのですが、メモリ上にあるダウンロードデータを
ファイルに保存せずに、そのまま解凍する方法があればと思い質問します。

UNLHAのAPIではUnlhaExtractMem()を使えばOKと思っていたのですが
これだとUNLHA32.DLL に渡すコマンドの文字列にファイル名が必要だと思うので
メモリ上のみで処理とはならないと思うのですがどうでしょうか?

やりたい処理としては
解凍関数に メモリ上のポインタ(もしくはファイルハンドル)を渡し、
メモリ上に展開、データの展開済みファイルのポインタ(ファイルハンドル)を
取得したいのですがいかがでしょうか?


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> UNLHAのAPIではUnlhaExtractMem()を使えばOKと思っていたのですが

NG です。
UnlhaExtractMem は、ディスク上に存在する圧縮ファイルをメモリ上に展開する関数で
あり、メモリ上に存在する圧縮データを展開する関数ではありません。

結論としては、Unlha32.dll を使う限り、お望みの処理は不可能です。
どうしてもやりたいのであれば、LHA の展開ルーチンを自分で書かなければなりませ
ん。
Unlha32.dll のソースコードは公開されていませんが、LHA for Unix という Unix 用の
ソフトウェアのソースコードならば入手できます。
基本的に、LHA の圧縮/展開ルーチンは OS に依存しない(だからこそ Unix に移植で
きた)ので、Unlha32.dll を使わずに LHA を扱う機能を持つソフトウェアは、この
LHA for Unix のソースコードを元にしている場合が多いようです。

http://www2m.biglobe.ne.jp/~dolphin/lha/lha-unix.htm

ただし、一時ファイルと Unlha32.dll を使うほうが、遥かに労力は少なくてすみます。

> データの展開済みファイルのポインタ(ファイルハンドル)を
> 取得したいのですがいかがでしょうか?

ポインタとファイルハンドルは同一ではありません。
ファイルハンドルとアーカイブハンドル(UnlhaOpenArchive で得られる HARC)も同一
ではありません。
このあたりは、実は何を取得したいのかがわからないため、これ以上アドバイスできま
せん。


返信引用
田中さん
 田中さん
(@田中さん)
ゲスト
結合: 19年前
投稿: 49
Topic starter  

シャノンさんありがとうございました。
>UnlhaExtractMem は、ディスク上に存在する圧縮ファイルをメモリ上に展開する関数で
あり、メモリ上に存在する圧縮データを展開する関数ではありません。
>ただし、一時ファイルと Unlha32.dll を使うほうが、遥かに労力は少なくてすみま
す。

たしかにそうです。
時間があれば挑戦してみたいところではあります。
どうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました