易于使用的库用于创建,阅读或修改.zip存档。
网址:http://www.nih.at/libzip/
支持平台:Win32,Linux,DOS
标题包括:zip.bi
标题版本:0.11.2
示例:在例子/压缩/
例子
''.zip解压缩使用libzip
#include once "zip.bi"
Sub create_parent_dirs(ByVal file As ZString Ptr)
''给出一个这样的路径:
''富/酒吧/巴兹/ file.ext
'' Do these mkdir()'s:
''FOO
''富/酒吧
''富/酒吧/巴兹
Dim As UByte Ptr p = file
Do
Select Case (*p)
Case Asc("/")
*p = 0
MkDir(*file)
*p = Asc("/")
Case 0
Exit Do
End Select
p += 1
Loop
End Sub
'' Asks libzip for information on file number 'i'在.zip文件中,
''然后提取它,同时根据需要创建目录。
Private Sub unpack_zip_file(ByVal zip As zip Ptr, ByVal i As Integer)
#define BUFFER_SIZE (1024 * 512)
Static As UByte chunk(0 To (BUFFER_SIZE - 1))
#define buffer (@chunk(0))
''检索文件名。
Dim As String filename = *zip_get_name(zip, i, 0)
Print "文件:" & filename & ",";
''通过zip_stat()检索文件大小。
Dim As zip_stat stat
If (zip_stat_index(zip, i, 0, @stat)) Then
Print "zip_stat()失败"
Return
End If
If ((stat.valid And ZIP_STAT_SIZE) = 0) Then
Print "无法从zip_stat()检索文件大小"
Return
End If
Print stat.size & "字节"
''如果需要,创建目录
create_parent_dirs(filename)
''写出文件
Dim As Integer fo = FreeFile()
If (Open(filename, For Binary, Access Write, As #fo)) Then
Print "无法打开输出文件"
Return
End If
''该文件的输入来自libzip
Dim As zip_file Ptr fi = zip_fopen_index(zip, i, 0)
Do
''写出zip_fread()返回的文件内容
''也解码和一切。
''zip_fread()填充我们的缓冲区
Dim As Integer bytes = _
zip_fread(fi, buffer, BUFFER_SIZE)
If (bytes < 0) Then
Print "zip_fread()失败"
Exit Do
End If
''EOF?
If (bytes = 0) Then
Exit Do
End If
''写<字节>文件的字节数
If (Put(#fo, , *buffer, bytes)) Then
Print "文件输出失败"
Exit Do
End If
Loop
''完成
zip_fclose(fi)
Close #fo
End Sub
Sub unpack_zip(ByRef archive As String)
Dim As zip Ptr zip = zip_open(archive, ZIP_CHECKCONS, NULL)
If (zip = NULL) Then
Print "无法打开输入文件" & archive
Return
End If
''对于.zip中的每个文件...(非常好的API,谢谢libzip)
For i As Integer = 0 To (zip_get_num_entries(zip, 0) - 1)
unpack_zip_file(zip, i)
Next
zip_close(zip)
End Sub
unpack_zip("test.zip")