VB6でZIPファイル(UnZip32.DLL使用)の解凍するアプリを作っているのですが、
(その際に、パスワード付ZIPなら、パスワードダイアログを出し、入力をして、正しければ、解凍するようなプログラムです。)
パスワード付ZIPファイルを解凍する際に、パスワードがあっているかどうか知る方法は、あるのでしょうか?
UnZip(解凍するAPI)で、解凍してみて戻り値で判断するしかないのでしょうか?
これですと、解凍結果ダイアログが、表示されてしまうので、都合が悪いのですが、。
Win2000
VB6.0SP6
> 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の場合、パスワードは書庫単位ではなく、中のファイル単位に
# 掛けられるので、ファイル毎に個別に指定する必要があります。
試してみたのですが、
故意に違うパスワードを指定した場合は、「UNZIP32.DLL Version 5.40の実行結果ダイアログ」が表示されます。メッセージは、何も出力されていないようですが。
正しいパスワードですとだいじょうぶでした。
これは、たぶんしょうがないのでしょうか?
># ZIPの場合、パスワードは書庫単位ではなく、中のファイル単位に
># 掛けられるので、ファイル毎に個別に指定する必要があります。
ということは、解凍時に、書庫のファイル一つ一つの情報を取り出し、
処理しないといけないということですね。勉強になりました。
> 故意に違うパスワードを指定した場合は、「UNZIP32.DLL Version 5.40の実行結果ダイアログ」が表示されます。
当方では、結果は UnZip()の第3引数に出力されるだけで、
特にダイアログ等は表示されませんでした。
・お使いの UNZIP32.DLL(5.40)は、Release版ですか? Debug Build版ですか?
・UnZip関数の第2引数の内容は、具体的にはどのような文字列にしていますか?
・UnZip関数の戻り値、および第3引数には、どのような結果が返されますか?
おそくなって申し訳ありません。
確認したのですが。
>・お使いの 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)
> サイズ :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での動作を確認してみては如何でしょうか。
おそくなりましたが、
UnZipRelease版とUnZipDebug版で試してみましたが、
いづれも、「UNZIP32.DLL Version 5.40の実行結果」が「解凍結果ダイアログ」がでました。
ただ、ダイアログに表示されるメッセージが、違っていました。
UnZipRelease版には、結果表示なし。
UnZipDebug版では、デバック結果(と思われる。)が表示されました。
他のWin2000で試したのですが、「UNZIP32.DLL Version 5.40の実行結果」は、表示されませんでした。
たぶん今開発している環境が悪いのもしれません。
ツイート | ![]() |