PB 实现文件和文件夹压缩、解压缩(含目录)方法demo
PB 9.0 实现文件目录压缩以及解压缩相对麻烦些,以下通过方法可实现如上需求:
一、引入外部DLL函数
//将文件SrcFile添加到压缩文档ZipFile Function long MyZip_AddFile(String SrcFile,ref string ZipFile ) LIBRARY "MyZip.dll" //从ZipFile中将由SrcName指定的文件解包到由DstName指定的目标文件 Function long MyZip_ExtractFile( String ZipFile,string srcName,ref string DstName) LIBRARY "MyZip.dll" //将目录SrcPath里的所有文件(子目录)添加到压缩文档ZipFile Function long MyZip_AddDirectory( string SrcPath,ref string ZipFile) LIBRARY "MyZip.dll" //将ZipFile中包含的所有文件解包到文件夹PathName (解压无目录信息) Function long MyZip_ExtractFileAll( String ZipFile,ref string PathName) LIBRARY "MyZip.dll" //压缩文件ZIP //参数:strSourceFileName(如果有多个文件,文件全路径请用"|"符号分隔) strZipFileName ZIP文件路径 IsKeepPaths 是否保持文件路径 //strRootDir 相对于文件目录的压缩路径 trPassword 压缩密码 function boolean ZipTo(string strSourceFileName,string strZipFileName,boolean IsKeepPaths,string strRootDir,string strPassword) Library 'wfZip.dll'; //解压缩ZIP文件 参数:strZipFileName ZIP文件路径 strDirectoryPath 解压到的目录 IsKeepPaths 布尔型,是否保持文件路径 strPassword 压缩密码 function boolean UnZipTo(string strZipFileName,string strDirectoryPath,boolean IsKeepPaths,string strPassword) Library 'wfZip.dll';
上述引入了Myzip.dll与wfZip.dll 两个动态链接库,Myzip.dll 用来压缩目录,该链接库的解压无法保留目录信息。所以使用wfZip.dll 的解压函数实现文件的解压(该链接库压缩仅能压缩2个文件,不采用);
二、使用函数
1、MyZip_AddDirectory(ls_path,ls_path_size) 压缩目录
2、UnZipTo(ls_path_size,ls_path,true,'') 解压文件
三、示例代码
1、压缩
string ls_path string ls_path_size long ll_i //压缩目录路径 ls_path = sle_1.text //压缩文件路径含文件名.后缀 ls_path_size = sle_2.text ll_i = MyZip_AddDirectory(ls_path,ls_path_size) //大于0 执行成功 小于0 执行失败 if ll_i < 0 then messagebox('','压缩失败!') else messagebox('','压缩成功!') end if
2、解压
string ls_path string ls_path_size boolean lb_i //解压到XX目录 ls_path = sle_3.text //解压的文件绝对路径 ls_path_size = sle_2.text lb_i = UnZipTo(ls_path_size,ls_path,true,'') // true 解压成功 false 解压失败 if lb_i = false then messagebox('','解压失败!') else messagebox('','解压成功!') end if