ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5272|回复: 4

[分享] 压缩及解压文件.调用7z.dll而非命令行.有源码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-7 13:34 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他编程应用
本帖最后由 ⊙⊙小噤○ 于 2017-10-7 13:39 编辑

一直想发点什么帖子和大家分享,但个人用到的资料都有大神专门写过.不好班门弄斧.一直搁置了下来最近在找压缩及解压文件的相关资料.
看了论坛相关资料都是用命令行调用rar之类程序的命令行完成的.
那样得安装程序,太受限制了.不好分发自己的程序.
最后在github找到了这个VszLib.感觉还不错.在论坛分享出来给大家,填上论坛这块的空白.
VB6调用7z压缩及解压文件.zip (686.5 KB, 下载次数: 192)

这个DLL的属性、方法,事件都很实用又不多。用法很简单。
下面说明是“官方”说明
如果看了下面的说明还不会用的话。可以跟贴回复。
温馨提醒:要先注册VszLib.DLL。并且把7z.Dll放在同一个目录。
源码是VB的。如果不想研究源码。直接注册DLL。在VBA引用即可。

VszLib

Vsz = Vb7Zip
7-zip SDK支持几种可以生成和读取7zzipgziptarbzip2和其他存档的压缩方法。这是一个VB6帮助器组件,可以7z.dllVB6项目中使用原始文件。
简单压缩
With NewcVszArchive
    .AddFile "your_file"
    .CompressArchive "test.7z"
End With
提取
With NewcVszArchive
    .OpenArchive "test.7z"
    .Extract "extract_folder"
End With
unicode文件名创建zip文件
With NewcVszArchive
    .AddFile "your_file"
    '--- store filenames in UTF-8
    .Parameter("cu") = "on"
    .CompressArchive "archive.zip"
End With
更多的选择
With NewcVszArchive
    .AddFile "your_file"
    .AddFile "folder\another_file","folder\name_in_archive"
    '--- fast compression (-mx3)
    .Parameter("x") = 3
    '--- LZMA2 method supports multi-corecompression
    .Parameter("0") ="LZMA2"
    .Parameter("mt") = "on"
    .Password = "secret"
    '--- split in 10MB volumes
    .VolumeSize = 10# * 1024 * 1024
    .CompressArchive "test_lzma2.7z"
End With
With New cVszArchive
    .OpenArchive "source.7z"
    .Extract "bin_folder","*.exe"
End With
使用源
在开启Src\VszLib.vbp寄存器Src\SevenZip.tlbregtlib.exeVB6 IDE或你喜欢的类型库注册工具。您不需要重新分配SevenZip.tlb,只在开发环境中需要。
使用组件
注册Bin\VszLib.dllregsvr32.exe(或VB6 IDE),并添加引用|在您的项目(项目引用...),7-ZIP VB6助手1.0。您只需要Bin\VszLib.dll在应用程序中重新分发,只需要pdb调试文件才能进行调试。注意,Bin\VszLib.dll源中使用行号编译,以便错误记录可以产生更多有用的跟踪。


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-7 13:46 | 显示全部楼层
API
唯一可公开访问的课程是cVszArchive。以下是相关性(种类)顺序的方法,属性和事件的简短说明。
Init([DllFile As String]) As Boolean
可选地用于指示7z.dll位置。如果DllFile是空的,首先7z.dll从VszLib.dll文件夹加载,然后注册表检查7-zip安装文件夹,最后轻量级7za.dll从VszLib.dll文件夹中尝试加载。最好的做法是放置在客户端代码7z.dll旁边VszLib.dll,不要Init显式地从客户端代码中调用。提取/压缩操作会在需要时调用它。
请注意7za.dll(从7-zip附件)可用于压缩/提取7z档案(不支持zip)。更小的7zxa.dll(172KB)可以用来提取7z档案。
OpenArchive(ArchiveFile As String) As Boolean
使用归档文件扩展名打开存档,以猜测解压缩器类型。目前支持的更新文件扩展名:7z,zip,tar,bz2,gz,xz,wim。支持的其他格式:rar,cab,chm,iso,msi,hfs,iso,arj,cpio,deb,dmg,fat,flv,lzh,lzma,lzma86,mbr,ntfs,exe,pmd,rpm,001,swf, vhd,xar,z。人口FileCount和FileInfo财产。
Extract(TargetFolder As String, [Filter]) As Boolean
TargetFolder从以前打开的归档文件中提取文件。可选Filter可以通过精确匹配(document.txt),文件名掩码(*.exe)或FileCount布尔数组来指定要提取的文件条目,每个索引指示是否解压缩具有相同索引(数组条目设置为True)的文件或跳过它(数组条目集到False)。引发Progress事件以表明进展并允许取消提取。
Property FileCount As Long (只读)
返回存档中的文件条目数

Property FileInfo(FileIdx As Long) (只读)
返回一个包含有关文件条目信息的数组。数组索引为:0 - 文件名,1 - 属性,2 - 大小,3 - 如果加密,4 - CRC,5 - 文件注释,6 - 创建时间,7 - 最后访问时间,8 - 最后写入时间。Empty如果当前的归档格式不支持,则可能有一些条目。
AddFile(File As String, [Name As String], [Comment As String]) As Boolean
添加一个要归档的文件。File必须是现有文件的(绝对)路径。可选Name可以在存档中指定条目的名称和相对文件夹。如果Name未指定,File则在档案的根文件夹中使用filename部分作为名称。Comment是可选的(可能)不受所有压缩机的支持。
CompressArchive(ArchiveFile As String) As Boolean
使用先前添加的文件创建存档。压缩器类型由归档文件扩展名猜测。引发Progress事件以指示进度并允许取消压缩。
Property Parameter(ParamName As String) As Variant (读/写)
指定自定义压缩参数。这些对应于-m命令行的切换7z.exe。设置压缩级别切换-mx3或-mx=3转换为Parameter("x") = 3。设置7z压缩方法-m0=LZMA2被翻译成Parameter("0") = "LZMA2"。设置多线程切换-mmt=on或-mmt=3转换为Parameter("mt") = "on"或Parameter("mt") = 3。设置加密头切换-mhe=on被转换为Parameter("he") = "on"。有关其他信息,请参阅-m开关的更多示例。
Property Password As String (读/写)
获取/设置提取/压缩期间使用的密码。如果使用不正确的存档密码,解压缩程序会引发数据错误。密码错误?错误通过Error事件。
Property VolumeSize As Double (读/写)
获取/设置在压缩期间创建的拆分卷的卷大小(以字节为单位)。只能用于7z档案。对于其他格式,将VolumeSize本机解压缩器不支持模式的大小块中的输出归档分割。
Property FormatCount As Long (只读)
获取7z.dll已加载的格式数量Init。
Property FormatInfo(FormatIdx As Long) As Variant (只读)
返回一个包含压缩格式信息的数组。数组索引为:0 - 名称,1 - 类别ID,2 - 文件扩展名,3 - 附加扩展名(如果有),4 - 如果更新支持,则为bool,5 - 保留名称时为bool,带有归档的6字节数组开始签名,具有归档完成签名的7字节数组。

Property LastError As String (只读)
获取上次操作期间发生的最后一个错误。如果没有发生错误,返回空字符串。

Property PreserveDirectoryStructure As Boolean
获取/设置是否TargetFolder在提取期间保留归档的目录结构。
Event Progress(FileIdx As Long, Current As Double, Total As Double, Cancel As Boolean)
当有关当前运营进展的新信息可用时提出并给予用户取消操作的机会。FileIdx是正在提取/压缩的当前文件的索引。该索引可以与FileInfo属性一起使用。Current并且Total可以使用参数来计算完成的百分比。Cancel可以设置中止当前操作。
Event Error(Description As String, Source As String, Cancel As Boolean)
在当前操作期间出现意外情况时触发。Description包含用户Cancel在Progress事件中设置时被取消。Description包含数据错误。密码错误?如果提供错误的密码来提取加密档案。当输入/输出文件不可访问(权限,网络中断)时可以提高。设置Cancel指示是否完成操作或立即中止。
Event NewVolume(FileName As String)
在创建多卷归档以指示在压缩期间创建的新文件名时引发。如果要在错误或用户取消时删除卷,则很有用。

BeforeExtract(ByVal FileIdx As Long, FileName As String, SkipFile As Boolean, Cancel As Boolean)
在从存档提取文件之前提起。FileName可用于即时更改目标输出文件名。SkipFile可以用于根据不能用方法Filter参数实现的逻辑选择性地提取文件Extract。Cancel可以设置中止进一步提取。

TA的精华主题

TA的得分主题

发表于 2017-10-7 19:57 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不错,赞一个,。。

TA的精华主题

TA的得分主题

发表于 2017-10-7 20:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-10-30 09:58 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 00:21 , Processed in 0.032297 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表