首页/技术开发/内容

为Visual FoxPro应用程序增加文件压缩技巧

技术开发2024-06-05 阅读()
'))
* 建立压缩文件信息
addZIP_Include(sInclFiles) && (sInclFiles)
* 压缩文件并返回被压缩的文件数目
Return addZIP()

文件解压缩程序
* 程序名称:AUNZIP.PRG
* 程序说明:在Visual FoxPro中实现文件解压缩
* 程序要求:AUNZIP32.DLL放置在Windows的System目录或当前目录下
* 使用方法:AUNZIP(lInitialize, sArchive sDir[, sExtractFiles[, UnZIPparams]])
* 参数说明:
* lInitialize:.T. – 第一次使用本程序,.F. – 非第一次使用本程序
* sArchive: 带有扩展名的压缩文件名,如"C:\THISFILE.ZIP"
* sDir: 目标目录,如"D:\TEMP"
* sExtractFiles:需要进行解压缩的文件名称[可选],不同文件名之间有一个空格
* 缺省:"*.*"
* 例1:"C:\CUSTOMER.DBF"
* 例2:"C:\CUSTOMER.DBF D:\*.TXT D:\DATABASES\*.*"
* UnZIPparams:压缩参数[可选]
* F 文件更新
* D 包括目录信息
* OA 全部覆盖(缺省)
* O0 不覆盖
* OU 提问是否覆盖
* S 使用密码 (必须是最后一部分)
* 示范语句:AUNZIP(.T., "ZIPFILE", "*.DBF *.TXT Customer.doc")
* 返回参数:被解压缩的文件数目,如果没有指定压缩文件名则返回-1


* 接受参数
PARAMETERS Initialize, sArchive, sDir, sExtractFiles, UnZIPparams
PRIVATE Params, sTemp
Params = PARAMETERS()
* 声明需要的动态链接库并使当前窗口获得焦点
IF Params = 0 OR Initialize
PRIVATE HWND
DECLARE INTEGER GetActiveWindow IN win32api
HWND = GetActiveWindow()
DECLARE addUNZIP_Initialise IN AUNZIP32
DECLARE SHORT addUNZIP_SetParentWindowHandle IN AUNZIP32 SHORT @ HWindow
DECLARE SHORT addUNZIP_ArchiveName IN AUNZIP32 STRING @ sArchName
DECLARE SHORT addUNZIP_RestoreStructure IN AUNZIP32 SHORT @ nResStr
DECLARE SHORT addUNZIP_Freshen IN AUNZIP32 SHORT @ nFreshn
DECLARE SHORT addUNZIP_Include IN AUNZIP32 STRING @ sFileName
DECLARE SHORT addUNZIP_ExtractTo IN AUNZIP32 STRING @ sExtrTo
DECLARE SHORT addUNZIP_Register IN AUNZIP32 STRING @ RegName, INTEGER @ RegNum
DECLARE SHORT addUNZIP_Decrypt IN AUNZIP32 STRING @ sPassw
DECLARE SHORT addUNZIP_Overwrite IN AUNZIP32 SHORT @ nOvLevel
DECLARE SHORT addUNZIP IN AUNZIP32
addUNZIP_Initialise()
addUNZIP_SetParentWindowHandle(HWND)
* addUNZIP_Register("RegistrationName", RegistrationNumber)
* 如果使用的是本动态链接库的注册版本,则可以添加上面一行
* 其作用是在压缩文件中使用密码保护


* 如果没有指定压缩文件名,则返回0(没有文件被解压缩)
IF Params < 2
RETURN 0
ENDIF
ENDIF
* 如果没有指定解压缩目标目录,则响铃并返回0(没有文件被解压缩)
IF Params < 3
?? CHR(7)
MESSAGEBOX('缺少解压缩参数!',0, 'AUNZip 警告!')
RETURN 0
ENDIF
* 如果存在解压缩参数,则获取解压缩参数
IF Params > 3
UnZIPparams = ALLT(UnZIPparams)
PRIVATE LastPos, PASSWORD, nCurPos
LastPos = LEN(UnZIPparams) + 1
* 检查是否使用密码
nCurPos = ATC('S', UnZIPparams)
IF nCurPos > 0
cPassWord = SUBSTR(UnZIPparams, nCurPos+1)
addUNZIP_Decrypt(cPassWord)
UnZIPparams = LEFT(UnZIPparams, nCurPos -1)
ENDIF
* 检查是否恢复目录信息
nCurPos = ATC('D', UnZIPparams)
IF nCurPos > 0
addUNZIP_RestoreStructure(1)
ENDIF
* 检查是否进行文件更新
nCurPos = ATC('F', UnZIPparams)
IF nCurPos > 0
addUNZIP_RestoreStructure(1)
ENDIF
* 检查是否覆盖文件
DO CASE
* 全部覆盖
CASE 'OA' $ UnZIPparams
addUNZIP_Overwrite(0x0b)
* 不覆盖
CASE 'O0' $ UnZIPparams
addUNZIP_Overwrite(0x0c)
* 提问是否覆盖
CASE 'OU' $ UnZIPparams
addUNZIP_Overwrite(0x0a)
ENDCASE
IF nCurPos > 0
addUNZIP_RestoreStructure(1)
ENDIF
ELSE
addUNZIP_Overwrite(0x000a)
ENDIF
* 确认需要解压缩的压缩文件名
addUNZIP_ArchiveName(sArchive)
* 确认解压缩目标路径
addUNZIP_ExtractTo(ALLT(sDir))
* 确认需要进行解压缩的文件
sExtractFiles = IIF(Params<4, "*.*", ALLT(STRTRAN(sExtractFiles, ' ', '(北联网教程,专业提供视频软件下载)

第1页  第2页  第3页 

……

相关阅读