求教XceedZip使用 之 如何获取压缩包中包含的文件列表

xinliangyu 2005-11-15 10:28:52
在VB中使用XceedZip进行压缩与解压缩文件相当方便,但还有一点问题没弄明白——在不解压文件情况下,如何知道压缩包中包含哪些文件(含文件夹)?

在此先谢!

...全文
634 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinliangyu 2005-11-17
  • 打赏
  • 举报
回复
再次谢谢你,northwolves!
winehero 2005-11-16
  • 打赏
  • 举报
回复
'试一下ListZipContents吧:

Option Explicit
Dim m_FilesCount As Long

Private Sub Command1_Click()
m_FilesCount = 0
XceedZip1.ListZipContents
End Sub

Private Sub XceedZip1_ListingFile(ByVal sFilename As String, ByVal sComment As String, ByVal lSize As Long, ByVal lCompressedSize As Long, ByVal nCompressionRatio As Integer, ByVal xAttributes As XceedZipLibCtl.xcdFileAttributes, ByVal lCRC As Long, ByVal dtLastModified As Date, ByVal dtLastAccessed As Date, ByVal dtCreated As Date, ByVal xMethod As XceedZipLibCtl.xcdCompressionMethod, ByVal bEncrypted As Boolean, ByVal lDiskNumber As Long, ByVal bExcluded As Boolean, ByVal xReason As XceedZipLibCtl.xcdSkippingReason)
Debug.Print sFilename & vbCrLf
m_FilesCount = m_FilesCount + 1
End Sub
winehero 2005-11-16
  • 打赏
  • 举报
回复
XceedZip 4.0用于实现压缩/解压缩文件,几乎具有Winzip所有功能,采用zip标准文件格式(PKZip 2.04格式),支持加密,压缩文件多盘分割(便于备份到软盘),提供ActiveX和DLL方式,支持COM,提供组件开发模式(这样可以在ASP中使用),还可以生成自解压的EXE文件.同样采用ATL技术开发(使用VC++ 6.0),不需要其余的DLL,便于发布.

提供众多的属性,方法,事件,完全可以编制一个属于你自己的Winzip.
还可以显示压缩/解压缩的进度情况.



看看压缩的代码,注意只用到Xceedzip众多方法和属性中极少数的几个,不过已经实现了常用的功能:

long ResultCode file://指定需要压缩的具体文件名
ole_1.object.FilesToProcess = "c:\autoexec.bat" + "~n~r" + &
"c:\config.sys" + "~n~r" + & "c:\io.sys" + "~n~r" + & "c:\windows\calc.exe" /*-----------------------------------------------------还可以用下面格式例1ole_1.object.FilesToProcess = "c:\DATA\*"这样表示压缩C:\DATA目录下所有文件(但不包含子目录)例2:ole_1.object.ProcessSubfolders = TRUEole_1.object.FilesToProcess = "c:\DATA\*"表示压缩C:\DATA所有文件并包括子目录其所有文件-----------------------------------------------------*///可以指定压缩文件时所采用的密码//(密码长度可达80个字符,最好设置长一点,不容易被解密)ole_1.object.EncryptionPassword = "123"//如果指定PreservePaths为True则会保留原来文件所在的路径//这样在解压zip文件时可以完全恢复原来的目录结构和其中的文件ole_1.object.PreservePaths = true//指定压缩到什么文件中(如果源文件存在,则同名文件会更新)ole_1.object.ZipFilename = "c:\test.zip"//开始压缩ResultCode = ole_1.object.Zip//检查是否成功string ls_errorIf ResultCode <> 0 Then ls_error = ole_1.object.GetErrorDescription(0, ResultCode) Messagebox("提示", "压缩不成功,出错信息为:" + ls_error)Else Messagebox("提示", "压缩成功")End If


解压缩的代码如下:

long ResultCode string ls_error//解压缩哪些文件,用*表示zip中所有文件ole_1.object.ProcessSubfolders = TRUEole_1.object.FilesToProcess = "*" //指定原来压缩文件时所采用的密码,密码不正确则会激发//xceedzip的SkippingFile事件ole_1.object.EncryptionPassword = "123"//指定PreservePaths为True//这样可以在解压缩时,恢复原zip文件中包含的目录结构ole_1.object.PreservePaths = true//指定解压缩到的起始目录ole_1.object.UnzipToFolder = "c:\test unzipped files"//指定需要解压缩的原zip文件ole_1.object.ZipFilename = "c:\test.zip"//开始解压缩ResultCode = ole_1.object.Unzip//检查是否成功If ResultCode <> 0 Then ls_error = ole_1.object.GetErrorDescription(0, ResultCode) Messagebox("提示", "解压缩不成功,出错信息为:" + ls_error)Else Messagebox("提示", "解压缩成功")End If
显示压缩/解压缩进度的代码则非常简单,因为Xceedzip已经提供相应事件globalstatus

只需要在该事件中写一行代码:

hpb_1.position = nBytesPercent


xinliangyu 2005-11-16
  • 打赏
  • 举报
回复
直接就沉下去啦!?
请路过的各位多多指教!
northwolves 2005-11-16
  • 打赏
  • 举报
回复
我的版本3.1,呵呵.

最新版的这里有代码例子:

http://www.xceedsoft.com/cs/
xinliangyu 2005-11-16
  • 打赏
  • 举报
回复
非常感谢winehero(编程人生)与northwolves(狼行天下)!
结合两位的示例,这个问题总算弄懂了!

“winehero(编程人生)”的代码是基于4.0版的,“northwolves(狼行天下)”的则可能与我现在使用的版本一样,是3.5的。
现贴出我的最终代码(XceedZip3.5版的):

Dim WithEvents Xzip As XceedZip '使用WithEvents关键字是为了能触发对象事件Listing

sub XXX()
Set Xzip = New XceedZip
With Xzip
.ZipFileName = FileToUnZip
.List '这句触发Listing事件
End With
Set Xzip = Nothing
end sub

Private Sub Xzip_Listing(FileName As String, ByVal Size As Long, ByVal PSize As Long, ByVal Processed As Long, ByVal FileAttr As Integer, FTime As String, ByVal CRC As Long, ByVal Ratio As Integer, ByVal Completion As Integer, ByVal Method As Integer, ByVal Encrypted As Integer, ByVal ComLen As Integer, Comment As String)
Debug.Print FileName '将文件名显示在即时窗口中
End Sub
winehero 2005-11-16
  • 打赏
  • 举报
回复
'楼上的,XceedZip应该没用List方法,如下是使用我贴代码输出的一个结果:
'其中列出所有文件,包含子目录的。因此你要得到有多少子目录,可以通过
'判断\符号来处理,这个很简单,留待你去处理了

———————————————————————————————————
demo\DlgJpeg.cpp

demo\DlgResample.cpp

demo\demoView.h

demo\Res\Toolbar.bmp

demo\Res\b1.ico

demo\Res\bg.bmp

demo\Res\bg.gif

demo\Res\bg.jpg

demo\Res\bg.tif

demo\Res\bg2.jpg

demo\Res\canc.ico

demo\Res\demo.ico

demo\Res\demo.rc2

demo\Res\demoDoc.ico

demo\Res\gray.ico

demo\Res\ico2.bin

demo\Res\no1.ico

demo\Res\ok.ico

demo\Res\r1.ico

demo\Res\toolbar1.bmp

demo\Res\us.png

demo\DlgMix.h

demo\DlgMix.cpp

demo\DlgDither.cpp

demo\DlgDither.h

demo\demoView.cpp

demo\DlgOptions.cpp

demo\demo.clw

demo\demo.rc

CxImage\cximage.dsw

CxImage\tif_xfile.cpp

CxImage\ximath.h

CxImage\ximawmf.cpp

CxImage\ximawmf.h

CxImage\xiofile.h

CxImage\CxImageDLL\CxImageCrtDll.cpp

CxImage\CxImageDLL\CxImageDll.dsw

CxImage\CxImageDLL\CxImageMfcDll.clw

CxImage\CxImageDLL\CxImageMfcDll.cpp

CxImage\CxImageDLL\CxImageMfcDll.h

CxImage\CxImageDLL\StdAfx.cpp

CxImage\CxImageDLL\StdAfx.h

CxImage\CxImageDLL\StdCrt.h

CxImage\CxImageDLL\resource.h

CxImage\CxImageDLL\CxImageCrtDll.dsp

CxImage\CxImageDLL\cximagemfcdll.dsp

CxImage\CxImageDLL\CxImageMfcDll.rc

CxImage\CxImageDLL\resrc1.h

CxImage\CxImageDLL\CxImageCrtDll.rc

CxImage\xfile.h

CxImage\ximabmp.h
northwolves 2005-11-16
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
XceedZip1.ZipFileName = "c:\xx.zip"
XceedZip1.List
End Sub

以上代码可以在调试窗口看到压缩包中包含的文件列表

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧