VB6 リファレンス お品書き へ戻ります
Visual Basic6 リファレンス


VB6 ZIPファイル解凍操作
API(UNZIP32.DLL)を使ったZIPファイルの解凍操作

Unzip32 API
UNZIP32.DLL が必要です。 Download

ソースはVB6用で記述しています。VB.NET以降のバージョンは型宣言に注意してください
(VB6:Long → VB.NET以降:Integer)
(VB6:Integer → VB.NET以降:Short)

お品書き
● 標準モジュールZIP(API)用の標準モジュールのソース
● サンプルリストZIPファイルを解凍するサンプル プログラム
● Unzip>ZIPファイルを解凍
● UnZipGetVersionUNZIP32.DLLのバージョンを取得
● 標準モジュール(エラー定数)ZIP(API)用の標準モジュール(エラー定数)のソース


● API定義 標準モジュール

'===============
' ZIPファイルを解凍する
'===============
Public Declare Function UnZip Lib "unzip32" _
  (ByVal hwnd As Long, ByVal szCmdLine As String, _
   ByVal szOutput As String, ByVal dwSize As Long) As Long

'===========================
' UNZIP32.DLLのバージョン情報を取得する
'===========================
Public Declare Function UnZipGetVersion Lib "unzip32" () As Integer


● ZIPファイルを解凍するサンプル プログラム

'=========================
' ZIPファイルを指定のフォルダに解凍する
'=========================
Dim result As Long '戻り値 (成功:0 失敗:エラーコード)

result = UnZip(Me.hwnd, "-o c:¥test¥sample.zip c:¥wk¥", "", 0) '解凍

If (result <> 0) Then MsgBox "Error/Warning : 0x" & Hex(result)


● Unzip APIメソッド
【機能】ZIPファイルを解凍します。成功すれば、0を返します。
【宣言】 Public Declare Function UnZip Lib "unzip32" _
(ByVal hwnd As Long, ByVal szCmdLine As String, _
ByVal szOutput As String, ByVal dwSize As Long) As Long

hwndウィンドウハンドルを指定します。
szCmdLine UnZipに渡すコマンドを指定します。

  コマンドの書式
[-<command>] [[-<options>...] <archive_file_name>[.ZIP][<directory_name>¥] [[@<list_name>|<filespec>]...]

-<command>説明
-c 書庫ファイルの表示
書庫から1個以上のファイルを解凍して、表示します。
ファイル名等の情報も出力されます。
-f すでに存在するファイルのみアップデートします。
書庫から1個以上のファイルをカレントディレクトリまたは指定されたディレクトリに解凍します。
ただし、新規作成はせず、解凍ファイルが既存ファイルより新しい場合だけ、上書きします。
-l 書庫の内容の一覧表示 (LHA風の書式)
-lv書庫の内容の一覧表示 (UNZIP 標準の書式)
-p 書庫ファイルの表示(内容のみ)
書庫から1個以上のファイルを解凍して、表示します。
-c と異なり、ファイル名等の出力はありません。
-t 書庫の正当性テスト
選択されたファイルの内容の CRC 値が正しいかテストします。
ファイル内容の確認には 32 ビット CRC を使っています。
-u すでに存在するファイルのアップデート。
書庫から1個以上のファイルをカレントディレクトリまたは指定されたディレクトリに解凍します。
解凍ファイルが既存ファイルより新しい場合だけ、上書きします。またファイルが存在しない場合には新規作成します。
-v 書庫の内容の一覧表示 (UNZIP 標準のフル書式)
-x 書庫のファイルを解凍 (default)
書庫から1個以上のファイルをカレントディレクトリまたは指定されたディレクトリに解凍します。
解凍結果の報告書式は、標準で
      file_name method to new_file_name
です。file_name は書庫中のファイル名、new_file_name は解凍後の実際のファイル名(フルパス名)です。
また、method は圧縮方式により
  "Extracting"、"UnShrinking"、"Expanding"、"Exploding"、"Inflating"
のいずれかとなります。
-xv書庫のファイルを解凍(UNZIP の標準形)
-x と同様に解凍します。
ただし、解凍結果の報告書式は、もともとのUNZIP の標準形で、
      method: new_file_name
となります。それぞれの意味は -x と同じです。
-z コメントの表示
書庫に付けられたコメントだけを表示します。
-Z コメントの表示
書庫に付けられたコメントを解凍に先立って、MessageBox() で表示します。

-<option>説明
-a MS-DOS のテキスト形式(CR+LF で改行)に変換します。
これは、元のファイルが Mac のテキスト形式(CR で改行)、または Unix/VMS のテキスト形式(LF で改行) の場合のみ有効です。
-C 正規表現で大文字と小文字を区別しない (default)
-i 解凍状況の表示ダイアログを出す (default)
禁止するには --i と指定してください。
-j 書庫中のディレクトリ階層の記録を無視し、すべてのファイルを指定したディレクトリに展開します。
-n すでにファイルが存在すれば、上書きしない。
-o すでにファイルが存在しても、ユーザーに問い合わせることなく上書きする。
-P$$$暗号化ファイルに対して、$$$ をパスワードとして使用する。
暗号化はファイル毎に異なる可能性がありますが、これで指定できるのは全てに共通で1個だけです。
-q 出来るだけ余計な情報は表示しない。
-qqさらに「静か」
-sファイル名中に空白があってもそのまま処理する (default)

szOutputUnzipの実行結果のログを返します。省略する時は、"" を指定。
dwSizeszOutputのサイズを指定します。省略時は、0を指定。
【 例 】 Dim result As Long             '戻り値 (成功:0 失敗:エラーコード)
Dim szOutput As String * 2048  'Unzipの実行ログ
result = UnZip(Me.hwnd, "c:¥test¥sample.zip c:¥wk¥", szOutput, Len(szOutput))
szOutput = Left(szOutput, InStr(szOutput, vbNullChar) - 1)
Debug.Print szOutput
If (result <> 0) Then MsgBox "Error/Warning : 0x" & Hex(result)

  ※ 失敗、もしくは、ユーザキャンセルした場合は、エラーコードが返ります。Err.LastDllErrorには、エラーコードはセットされません。

  ※ フォルダやファイル名にスペースがある場合は、ダブルクォーテーションで囲みます。
     Chr(34) & "c:¥Program Files¥sample.zip" & Chr(34) & " " & Chr(34) & "c:¥My Documents¥" & Chr(34)


● UnZipGetVersion APIメソッド
【機能】UNZIP32.DLLのバージョンを返します。
【宣言】 Public Declare Function UnZipGetVersion Lib "unzip32" () As Integer
【 例 】result = UnZipGetVersion()

  ※ 戻り値のバージョンは、版数に 100 を掛けたものが返ってきます。


● エラー定数 標準モジュール

'Constants - The Unzip32 functions return error codes.

'/* WARNING */
Private Const ERROR_DISK_SPACE = &H8005&
Private Const ERROR_READ_ONLY = &H8006&
Private Const ERROR_USER_SKIP = &H8007&
Private Const ERROR_UNKNOWN_TYPE = &H8008&
Private Const ERROR_METHOD = &H8009&
Private Const ERROR_PASSWORD_FILE = &H800A&
Private Const ERROR_VERSION = &H800B&
Private Const ERROR_FILE_CRC = &H800C&
Private Const ERROR_FILE_OPEN = &H800D&
Private Const ERROR_MORE_FRESH = &H800E&
Private Const ERROR_NOT_EXIST = &H800F&
Private Const ERROR_ALREADY_EXIST = &H8010&
Private Const ERROR_TOO_MANY_FILES = &H8011&

'/* ERROR */
Private Const ERROR_MAKEDIRECTORY = &H8012&
Private Const ERROR_CANNOT_WRITE = &H8013&
Private Const ERROR_HUFFMAN_CODE = &H8014&
Private Const ERROR_COMMENT_HEADER = &H8015&
Private Const ERROR_HEADER_CRC = &H8016&
Private Const ERROR_HEADER_BROKEN = &H8017&
Private Const ERROR_ARC_FILE_OPEN = &H8018&
Private Const ERROR_NOT_ARC_FILE = &H8019&
Private Const ERROR_CANNOT_READ = &H801A&
Private Const ERROR_FILE_STYLE = &H801B&
Private Const ERROR_COMMAND_NAME = &H801C&
Private Const ERROR_MORE_HEAP_MEMORY = &H801D&
Private Const ERROR_ENOUGH_MEMORY = &H801E&
Private Const ERROR_ALREADY_RUNNING = &H801F&
Private Const ERROR_USER_CANCEL = &H8020&
Private Const ERROR_HARC_ISNOT_OPENED = &H8021&
Private Const ERROR_NOT_SEARCH_MODE = &H8022&
Private Const ERROR_NOT_SUPPORT = &H8023&
Private Const ERROR_TIME_STAMP = &H8024&
Private Const ERROR_TMP_OPEN = &H8025&
Private Const ERROR_LONG_FILE_NAME = &H8026&
Private Const ERROR_ARC_READ_ONLY = &H8027&
Private Const ERROR_SAME_NAME_FILE = &H8028&
Private Const ERROR_NOT_FIND_ARC_FILE = &H8029&
Private Const ERROR_RESPONSE_READ = &H802A&
Private Const ERROR_NOT_FILENAME = &H802B&