您的位置信息之舟电 脑硬件栏目首页数据库类Foxpro 收藏本页

→ 为Visual FoxPro应用程序增加文件压缩功能二

www.kepusoft.com 信息之舟电脑软件应用栏目

    信息之舟电脑软件应用栏目编者按: 文件解压缩程序
    * 程序名称: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, ' ', '|')))
    * 构造解压缩信息
    addUNZIP_Include(sExtractFiles)
    * 解压缩文件并返回被解压缩的文件数目
    RETURN addUNZIP()

    [补充说明]
    动态链接库AZIP.DLL和AUNZIP.DLL是NetCom公司英国分部的工程师Stephen Darlington编写的共享软件AddZip中的一部分。

www.kepusoft.com 信息之舟电脑之家收集整理推荐文章