VB6でZIPファイルの解凍するには?

解決


Yoo  2004-08-18 01:07:46  No: 115672

VB6でZIPファイル(UnZip32.DLL使用)の解凍するアプリを作っているのですが、
(その際に、パスワード付ZIPなら、パスワードダイアログを出し、入力をして、正しければ、解凍するようなプログラムです。)

パスワード付ZIPファイルを解凍する際に、パスワードがあっているかどうか知る方法は、あるのでしょうか?

UnZip(解凍するAPI)で、解凍してみて戻り値で判断するしかないのでしょうか?
これですと、解凍結果ダイアログが、表示されてしまうので、都合が悪いのですが、。

Win2000
VB6.0SP6


魔界の仮面弁士  2004-08-18 02:20:41  No: 115673

> UnZip(解凍するAPI)で、解凍してみて戻り値で判断するしかないのでしょうか?
> これですと、解凍結果ダイアログが、表示されてしまうので、都合が悪いのですが、。

解凍結果ダイアログを出さなければ良いのでは?

If Dir(OutputFolder & TargetFile) <> "" Then
    Kill OutputFolder & TargetFile
End If
CmdLine = "-x -s -V --i -C -qq -P" & PASSWORD & " " & ZipFile & " " & OutputFolder & " " & TargetFile

ret = UnZip(0, CmdLine, buf, Len(buf))
Select Case ret
 Case 0
    MsgBox "OK"
 Case ERROR_PASSWORD_FILE
    MsgBox "パスワードが違う"
End Select

# ZIPの場合、パスワードは書庫単位ではなく、中のファイル単位に
# 掛けられるので、ファイル毎に個別に指定する必要があります。


Yoo  2004-08-18 02:52:19  No: 115674

試してみたのですが、
故意に違うパスワードを指定した場合は、「UNZIP32.DLL  Version 5.40の実行結果ダイアログ」が表示されます。メッセージは、何も出力されていないようですが。
正しいパスワードですとだいじょうぶでした。
これは、たぶんしょうがないのでしょうか?

># ZIPの場合、パスワードは書庫単位ではなく、中のファイル単位に
># 掛けられるので、ファイル毎に個別に指定する必要があります。

ということは、解凍時に、書庫のファイル一つ一つの情報を取り出し、
処理しないといけないということですね。勉強になりました。


魔界の仮面弁士  2004-08-18 04:24:57  No: 115675

> 故意に違うパスワードを指定した場合は、「UNZIP32.DLL  Version 5.40の実行結果ダイアログ」が表示されます。

当方では、結果は UnZip()の第3引数に出力されるだけで、
特にダイアログ等は表示されませんでした。

・お使いの UNZIP32.DLL(5.40)は、Release版ですか? Debug Build版ですか?
・UnZip関数の第2引数の内容は、具体的にはどのような文字列にしていますか?
・UnZip関数の戻り値、および第3引数には、どのような結果が返されますか?


Yoo  2004-08-19 00:57:01  No: 115676

おそくなって申し訳ありません。
確認したのですが。

>・お使いの UNZIP32.DLL(5.40)は、Release版ですか? Debug Build版ですか?

たぶんRelease版だとおもいますが、UnZipGetVersionで調べると、540でした。
統合アーカイバ・プロジェクトCommon Archivers Library
http://member.nifty.ne.jp/csdinc/archiver/lib/unzip32download.html
と同じものでした。

非実行ファイル

作成日時    :2002/06/05 09:26"47
更新日時    :1999/02/10 05:40"10
アクセス日時  :2004/08/18 00:00"00

サイズ    :188,928バイト(184.50KB)
ファイル属性  :A

フルパス:C:\WINNT\system32\UNZIP32.DLL

会社名  :Info-ZIP
著作権  :Portion Copyright c 1993-1999 CSD,inc. and shoda T.
商標  :Info-ZIP
製品名  :UNZIP32 Dynamic Link Library
内部名称  :UNZIP32
解説  :UNZIP32.DLL
ファイルバージョン  :5.4
製品バージョン  :5, 4, 0, 1
オリジナル名  :UNZIP32.DLL
コメント:Common Archiver Project's UNZIP32.DLL using Info-ZIP's UNZIP

>・UnZip関数の第2引数の内容は、具体的にはどのような文字列にしていますか?

-x -s -V -C -qq -Ptest2 "D:\test\unzp540-3.zip" D:\test\ unzp540.exe

D:ドライブにtestフォルダを作成し、unzp540.exeをunzp540-3.zipという名前で
パスワードtestで圧縮しました。
今回は、エラーにするため、test2というパスワードでやってみました。

>・UnZip関数の戻り値、および第3引数には、どのような結果が返されますか?
戻り値  32778
第3引数  何もはいっていませんでした。

WindowsNT Ver.5.0 Build 2195
Service Pack 4
搭載メモリ  511.5MB
Shell32.DLL 5.00.3900.6922
VisualBasic6.0(SP6)


魔界の仮面弁士  2004-08-20 06:20:47  No: 115677

> サイズ        :188,928バイト(184.50KB)
> フルパス:C:\WINNT\system32\UNZIP32.DLL
私の環境のDLLと比較してみましたが、ファイルサイズからして、
それはどうやら、Release版のようですね。

Debug.Print FileLen("C:\WINDOWS\system32\UNZIP32.DLL")
 188928 

Debug.Print FileLen("C:\Program Files\ArchiverDLL\UNZIP32\UNZIP32.DLL")
 376832 

>>・UnZip関数の第2引数の内容は、具体的にはどのような文字列にしていますか?
> -x -s -V -C -qq -Ptest2 "D:\test\unzp540-3.zip" D:\test\ unzp540.exe

私のコード(17日に回答した物です)ではダイアログが表示されませんが、
Yooさんのコードでは、『回答状況』ダイアログが一瞬だけ表示されました。

ただ、いずれのコードでも、『UNZIP32.DLL  Version 5.40の実行結果』が
「解凍結果ダイアログ」として表示されることはありませんでした。

そもそも、『UNZIP32.DLL  Version 5.40の実行結果』が表示されるのは、
Debug版の場合だけだと思っていたのですが…(違うのかな)

確認のため、確実にRelease版を使う事ができるよう、

Declare Function UnZipRelease Lib "Release版unzip32のフルパス" Alias "UnZip" (〜〜) As Long

Declare Function UnZipDebug Lib "Debug版unzip32のフルパス" Alias "UnZip" (〜〜) As Long

のようにして、両方のDLLでの動作を確認してみては如何でしょうか。


Yoo  2004-08-27 21:49:07  No: 115678

おそくなりましたが、
UnZipRelease版とUnZipDebug版で試してみましたが、

いづれも、「UNZIP32.DLL  Version 5.40の実行結果」が「解凍結果ダイアログ」がでました。
ただ、ダイアログに表示されるメッセージが、違っていました。

UnZipRelease版には、結果表示なし。
UnZipDebug版では、デバック結果(と思われる。)が表示されました。

他のWin2000で試したのですが、「UNZIP32.DLL  Version 5.40の実行結果」は、表示されませんでした。

たぶん今開発している環境が悪いのもしれません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加