ZipClass模块封装zlib完全操作ZIP文件支持静态黑月

易语言 2020-07-21 00:06:01

ZipClass模块封装zlib完全操作ZIP文件支持静态黑月

.子程序 ZIP_文件更新_从文件, 逻辑型, 公开
.参数 参_ZIP路径, 文本型
.参数 参_ZIP内文件名, 文本型, , 存放在ZIP中的文件名路径
.参数 参_文件路径, 文本型
.参数 参_进度回调, 子程序指针, 可空
.局部变量 局_句柄_ZIP压缩, 整数型
.局部变量 局_句柄_ZIP解压, 整数型
.局部变量 局_解压文件名, 文本型
.局部变量 局_文件信息, zip_fileinfo
.局部变量 局_缓冲区, 字节集
.局部变量 局_长度, 整数型
.局部变量 局_计次, 整数型
.局部变量 局_解压包信息, unz_global_info
.局部变量 局_解压文件信息, unz_file_info
.局部变量 局_压缩模式, 整数型
.局部变量 局_压缩级别, 整数型
.局部变量 局_回调判断, 逻辑型
.局部变量 局_返回值, 逻辑型
.局部变量 局_当前进度, 整数型
.局部变量 局_上次进度, 整数型

局_回调判断 = 取反 (是否为空 (参_进度回调))
局_句柄_ZIP解压 = unzOpen (参_ZIP路径)
.如果真 (局_句柄_ZIP解压 ≤ 0)
返回 (假)
.如果真结束
局_句柄_ZIP压缩 = zipOpen (参_ZIP路径 + “.ScZTmp”, #APPEND_STATUS_CREATE)
.如果真 (局_句柄_ZIP解压 ≤ 0)
unzClose (局_句柄_ZIP解压)
返回 (假)
.如果真结束
.如果真 (unzGetGlobalInfo (局_句柄_ZIP解压, 局_解压包信息) ≠ 0)
zipClose (局_句柄_ZIP压缩, “”)
unzClose (局_句柄_ZIP解压)
返回 (假)
.如果真结束
局_缓冲区 = 取空白字节集 (134217728)
局_返回值 = 真
.计次循环首 (局_解压包信息.number_entry, 局_计次)
局_解压文件名 = 取空白文本 (1024)
.如果真 (unzGetCurrentFileInfo (局_句柄_ZIP解压, 局_解压文件信息, 局_解压文件名, 1024, 0, 0, “”, 0) ≠ #UNZ_OK)
局_返回值 = 假
跳出循环 ()
.如果真结束
.如果真 (局_回调判断)
局_当前进度 = 局_计次 ÷ 局_解压包信息.number_entry × 100
.如果真 (局_当前进度 ≠ 局_上次进度)
CallWindowProc (参_进度回调, 局_当前进度, 0, 0, 0)
.如果真结束
局_上次进度 = 局_当前进度
.如果真结束
.如果真 (取文本右边 (局_解压文件名, 1) ≠ “/”)
.判断开始 (局_解压文件名 ≠ 参_ZIP内文件名)
局_返回值 = ZIP_RAW复制_从ZIP (局_解压文件名, 局_句柄_ZIP压缩, 局_句柄_ZIP解压, 局_解压文件信息.uncompressed_size, 局_解压文件信息, 局_缓冲区)
.如果真 (局_返回值 = 假)
跳出循环 ()
.如果真结束

.默认
局_返回值 = ZIP_文件添加_从文件 (局_句柄_ZIP压缩, 局_解压文件名, 参_文件路径)
.如果真 (局_返回值 = 假)
跳出循环 ()
.如果真结束

.判断结束

.如果真结束
.如果真 (unzGoToNextFile (局_句柄_ZIP解压) ≠ #UNZ_OK)
跳出循环 ()
.如果真结束

.计次循环尾 ()
.如果真 (局_返回值 = 假)
zipClose (局_句柄_ZIP压缩, “”)
unzClose (局_句柄_ZIP解压)
返回 (局_返回值)
.如果真结束
.如果真 (zipClose (局_句柄_ZIP压缩, “”) ≠ #ZIP_OK)
unzClose (局_句柄_ZIP解压)
返回 (假)
.如果真结束
.如果真 (unzClose (局_句柄_ZIP解压) ≠ #UNZ_OK)
返回 (假)
.如果真结束
.如果真 (文件更名 (参_ZIP路径, 参_ZIP路径 + “.ScZTemp”) = 假)
返回 (假)
.如果真结束
.如果真 (文件更名 (参_ZIP路径 + “.ScZTmp”, 参_ZIP路径) = 假)
文件更名 (参_ZIP路径 + “.ScZTemp”, 参_ZIP路径)
返回 (假)
.如果真结束
删除文件 (参_ZIP路径 + “.ScZTemp”)