【问】如何查找Zip包内部文件内容?
比如我想把aaa.zip中含有字符串abc的文件列出来,
由于压缩包里文件可能众多,所以要有实时进度显示,还要能中断。
请问,该如何做?
不想使用第三方控件,除非是纯动态库。
问题点数:20、回复次数:11Top
1 楼mjcom(不明飞行物)回复于 2006-03-17 09:45:07 得分 4
安装WinZIP后,安装目录就有一个动态连接库,是用来查看和解压文件的.XP以上的系统自身也带有解压ZIP文件的动态库,应该可以利用Top
2 楼of123()回复于 2006-03-17 10:03:52 得分 4
实际上,需要解压成临时文件,在其中搜索,然后删除临时文件。
你可以在循环过程中,对临时文件逐段搜索(利用 Instr 函数),这样就可以显示进度和接受中断(通过 DoEvents)。Top
3 楼of123()回复于 2006-03-17 10:12:42 得分 3
另,不需要安装 Winzip,将 Wzunzip.exe 命令行程序打包到安装文件中,通过 Shell 函数调用就可以解压了。
下载地址:http://www.winzip.com/downcl.htmTop
4 楼VBAHZ(凌云(E文词汇量580))回复于 2006-03-19 00:13:36 得分 0
这样也太慢了吧?有人试过Rar吗?
它的搜索好像不是打开包的吧?
用的应该是专门的算法,在万条文件里搜索字符仅用了5秒钟(结果有200多条),
实践对比,即使在不压缩的情况下,用读取文件的办法也达不到这个速度的,
所以只可能在压缩包里用算法才更快(指没有二次压缩的文本文件)因为它只把压缩包当成一个文件看。
难道,Zip包就没有这个查找包内数据的功能了吗?
实际上,我有过一次教训,有一个10M左右的Rar包(8千多个文本文件),压缩用了4分多钟,
而纯释放竟然要用5分多钟,晕了,解开后再去搜的话又不知要用N分钟了,然后还要删除临时文件,忒麻烦了,而就是这个包,Dos版的Rar仅用了5秒钟就搜索完毕了,
还有谁怀疑它是用释放后搜索的?
Zip包应该比Rar包的算法速度上快一点吧?但要是全部解开后再找,那。。。
死Rar 就是不支持Zip包(DOS版)讨厌
Top
5 楼VBAHZ(凌云(E文词汇量580))回复于 2006-03-19 00:22:33 得分 0
实际上我猜测,就Rar的搜索方式,可能是根据实际的Rar包的特性,直接把要搜索的字符转为压缩后的特征码,这样,就可以直接在一个压缩包里对比二进制数据了,找到后再把此段数据所属的源文件索引列出,而不需要真的去解码,
是解码N个文件快呢,还是压缩一串字符快呢?
这就是根本区别,速度当然快了N倍啦
我不是不会解压Zip包,本主题就是希望能找到类似Rar的快速搜索方式。
不知道有没有?
(之所以不用Rar包是有原因的,请不用提它了,但Rar的方式可以借鉴)
Top
6 楼kmlxk(xiaoKKKK)回复于 2006-03-19 09:11:26 得分 2
学习。。。
LZ把WinRAR逆向工程看看嘛 :PTop
7 楼VBAHZ(凌云(E文词汇量580))回复于 2006-06-17 20:03:56 得分 0
晕Top
8 楼northwolves(狼行天下)回复于 2006-06-17 20:32:30 得分 4
http://www.codeguru.com/vb/gen/vb_graphics/fileformats/article.php/c6743Top
9 楼northwolves(狼行天下)回复于 2006-06-17 20:40:17 得分 3
http://www.mikekohn.net/kunzip.phpTop
10 楼VBAHZ(凌云(E文词汇量580))回复于 2006-06-17 20:41:34 得分 0
若若的问一句,老大,这是不是查找文件二进制内容的呢?
Top
11 楼VBAHZ(凌云(E文词汇量580))回复于 2006-07-06 02:47:38 得分 0
GZTop




