网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 数据库类-> Foxpro-> 为Visual FoxPro应用程序增加文件压缩功能

为Visual FoxPro应用程序增加文件压缩功能
作者:佚名 来源:InterNet 加入时间:2005-1-31
相关文章
  • Visual FoxPro 9.0更强大了
  • 用FoxWeb在网上快速发布你的FOXPRO数据库
  • 用Visual FoxPro 5.0 设计数据文件结构浏览器
  • 利用Foxpro在网络环境下开发数据库管理软件经验点滴
  • 用Foxpro制作Windows输入法码表
  • Visual Foxpro生成任意打印字段报表的实现
  • 用FoxPro生成HTML文件
  • 优化 FoxPro 在网络上的性能
  • 如何修复被破坏的Foxpro数据库
  • 把FoxPro数据库转变成HTML表格
  • 相关书籍:
  • Visual FoxPro 6.0 中文版程序员指南
  • Visual Foxpro 6.0初级教程
  • VisualFoxpro 6.0中文版程序员指南
  • 压缩文件可以认为是一个包装文件的容器。通过文件压缩,大量文件可以被打包起来并当作一个文件来看待。此外,压缩文件在尺寸上普遍比原文件小,如文本文件在压缩以后的平均大小是原来的40%。因此,文件压缩能够大幅度的节省存储空间和网络传输时间,从而使得文件的携带和传输更加方便快捷。
    在DOS环境下,经常使用到的压缩程序是ARJ、RAR和PKZIP/PKUNZIP。在Windows环境下,经常使用到的压缩软件是WinZip和CleverZip。这些软件基本上都是共享软件,都可以从网络上免费获取。
    在数据库应用程序中,经常需要对数据文件进行压缩备份或者从压缩文件中恢复。以Visual FoxPro为例,通常的做法是通过FoxPro语句调用压缩软件,然后在该压缩软件的操作界面上进行文件压缩或者文件恢复。这种做法不仅在操作界面上非常不友好,而且大大地削弱了应用程序的整体性。以下介绍的FoxPro程序利用了两个共享的动态链接库AZIP.DLL和AUNZIP.DLL在Visual FoxPro内部实现了文件压缩与解压缩功能,从而较好地解决了这个问题。

    文件压缩程序
    * 程序名称:AZIP.PRG
    * 程序说明:在Visual FoxPro中实现文件压缩
    * 程序要求:AZIP32.DLL放置在Windows的System目录或当前目录下
    * 使用方法:USAGE: AZIP(lInitialize, sArchive, sInclFiles[, ZipParams])
    * 参数说明:
    --lInitialize:.T. – 第一次使用本程序,.F. – 非第一次使用本程序
    --sArchive: 带有扩展名的压缩文件名,如"C:\THISFILE.ZIP"
    --sInclFiles:需要压缩的文件名称,不同文件名之间有一个空格
    例1: "D:\CUSTDATA.DBF"
    例2: "C:\CUSTOMER.DBF D:\*.TXT D:\DATABASES\*.*"
    --ZIPparams:文件压缩参数[可选]
    e(x) x = 'X' 最大程度压缩
    x = '0' 无压缩
    x = 'S' 最小程度压缩
    x = 'N' 普通压缩(缺省)
    P 包括目录信息
    S 使用密码(必须是最后一部分)
    * 示范语句:AZIP(.T., "ZIPFILE", "*.DBF *.TXT Customer.doc")
    * 返回参数:被压缩的文件数目,如果没有指定文件名则返回-1
    * 接受参数
    PARAMETERS lInitialize, sArchive, sInclFiles, ZIPparams
    PRIVATE Params, sTemp
    Params = PARAMETERS()
    * 声明需要调用的DLL函数并使当前窗口获得焦点
    IF Params = 0 OR lInitialize
    PRIVATE HWND
    DECLARE INTEGER GetActiveWindow IN win32api
    HWND = GetActiveWindow()
    DECLARE addZIP_Initialise IN AZIP32
    DECLARE SHORT addZIP_SetParentWindowHandle IN AZIP32 SHORT @ HWindow
    DECLARE SHORT addZIP_ArchiveName IN AZIP32 STRING @ sArchName
    DECLARE SHORT addZIP_Include IN AZIP32 STRING @ sFileName
    DECLARE SHORT addZIP_Recurse IN AZIP32 SHORT @ nRecurse
    DECLARE SHORT addZIP_SetCompressionLevel IN AZIP32 SHORT @ nComprLvl
    DECLARE SHORT addZIP_IncludeDirectoryEntries IN AZIP32 SHORT @ nInclDir
    DECLARE SHORT addZIP_IncludeEmptyDirectoryEntries IN AZIP32 SHORT @ nInclEDir
    DECLARE SHORT addZIP_Update IN AZIP32 SHORT @ nUpdate
    DECLARE SHORT addZIP_Update IN AZIP32 SHORT @ nUpdate
    DECLARE SHORT addZIP IN AZIP32
    DECLARE SHORT addZIP_Register IN AZIP32 String @ RegName, Integer @ RegNum
    DECLARE SHORT addZIP_Encrypt IN AZIP32 STRING @ sPassw
    addZIP_Initialise()
    addZIP_SetParentWindowHandle(HWND)
    * 如果使用的是本动态链接库的注册版本,则可以添加下面一行
    addZIP_Register("RegistrationName", RegistrationNumber)
    * 其作用是在压缩文件中使用密码保护
    * 如果没有指定压缩文件名,则返回0(没有文件被压缩)
    IF Params < 2
    RETURN 0
    ENDIF
    ENDIF
    * 如果没有指定被压缩文件名,则响铃并返回0(没有文件被压缩)
    IF Params < 3
    ?? CHR(7)
    MESSAGEBOX('缺少操作参数!',0, 'AZip 警告!')
    RETURN 0
    ENDIF
    * 如果指定了文件压缩参数,按照参数进行压缩选择
    IF Params > 3
    ZIPparams = ALLT(ZIPparams)
    PRIVATE LastPos, PASSWORD, nCurPos
    LastPos = LEN(ZIPparams) + 1
    * 检查是否存在压缩密码
    nCurPos = ATC('S', ZIPparams)
    IF nCurPos > 0
    cPassWord = SUBSTR(ZIPparams, nCurPos+1)
    addZIP_Encrypt(cPassWord)
    ZIPparams = LEFT(ZIPparams, nCurPos -1)
    ENDIF
    * 检查是否保存目录信息
    nCurPos = ATC('P', ZIPparams)
    IF nCurPos > 0
    addZIP_Recurse(1)
    addZIP_IncludeDirectoryEntries(1)
    ENDIF
    * 检查文件压缩的程度
    nCurPos = ATC('E', ZIPparams)
    IF nCurPos > 0
    PRIVATE cCompLevel, nCompLevel
    cCompLevel = SUBSTR(ZIPparams, nCurPos + 1, 1)
    DO CASE
    * 最大程度压缩
    CASE cCompLevel = 'X'
    nCompLevel = 3
    * 最小程度压缩
    CASE cCompLevel = 'S' && min compression
    nCompLevel = 1
    * 没有压缩
    CASE cCompLevel = '0' && no compression
    nCompLevel = 0
    * 正常压缩
    OTHERWISE && normal/default compression
    nCompLevel = 2
    ENDCASE
    addZIP_SetCompressionLevel(nCompLevel)
    ENDIF
    ELSE
    addZIP_SetCompressionLevel(2)
    ENDIF
    * 指定压缩文件的路径
    addZIP_ArchiveName(sArchive)
    * 检查需要进行压缩的文件
    sInclFiles = ALLT(STRTRAN(sInclFiles, ' ', '|'))
    * 建立压缩文件信息
    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, ' ', '|')))
    * 构造解压缩信息
    addUNZIP_Include(sExtractFiles)
    * 解压缩文件并返回被解压缩的文件数目
    RETURN addUNZIP()

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

    [文章录入员:nancy]

    相关文章
  • Visual FoxPro 9.0更强大了
  • 用FoxWeb在网上快速发布你的FOXPRO数据库
  • 用Visual FoxPro 5.0 设计数据文件结构浏览器
  • 利用Foxpro在网络环境下开发数据库管理软件经验点滴
  • 用Foxpro制作Windows输入法码表
  • Visual Foxpro生成任意打印字段报表的实现
  • 用FoxPro生成HTML文件
  • 优化 FoxPro 在网络上的性能
  • 如何修复被破坏的Foxpro数据库
  • 把FoxPro数据库转变成HTML表格
  • 相关书籍:
  • Visual FoxPro 6.0 中文版程序员指南
  • Visual Foxpro 6.0初级教程
  • VisualFoxpro 6.0中文版程序员指南
  • 本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    Foxpro
    ACCESS
    MS SQL
    MySQL
    Oracle
    Foxpro
    PowerBuilder
    Sybase
    其它
    电脑教程阅读排行
    ·Visual FoxPro 9....
    ·VFP与Excel交互编程
    ·Visual Foxpro生成任...
    ·VFP访问外部数据源的几种方法
    ·为Visual FoxPro应用...
    ·如何用VFP的dbf进行SQL ...
    ·如何修复被破坏的Foxpro数据...
    ·用VFP6.0编写图片浏览器
    ·在VFP报表中实现每页打印指定记...
    ·利用Foxpro在网络环境下开发...
     
    大部分资料收集自互联网,如果无意中侵犯了您的权益,请发信到info@pcbookcn.com ,我们会在收信后24小时内删除。
    © CopyRight 2000-2010, WWW.pcbookcn.COM,Inc. All Rights Reserved