VFP中的数据压缩与恢复
出处:网络
----对一名VFP程序员来说,如何对数据库备份和恢复恐怕是最头疼的问题了。通常的解决方法不外乎这么几种:1.调用压缩工具软件对数据进行压缩备份和恢复;2.利用低层文件函数将数据库文件分割后备份和合并恢复;3.自行开发压缩功能模块。这些方法要么效率不高,浪费存储空间;要么界面不够美观和直观,不支持长文件名,程序员控制不方便;不懂英语的用户操作困难;要么开发难度大,通用性不佳,不利于数据的交流和转移。
----但是现在,有两个小东西把我从烦恼中解脱出来了。这就是由StephenDarlington开发,可以完成压缩、解压缩功能的ActiveX控件:aZip32.ocx和aUnZip32.ocx。它们可以在VFP中注册,象其他标准控件一样使用。aZip32.ocx能够对指定目录下的数据进行压缩,生成标准.zip格式文件;支持文件类型筛选;支持长文件名和分盘压缩;即时显示压缩进度;aUnZip32.ocx可以将指定的.zip格式文件解压缩到指定目录中,支持相对路径和绝对路径方式,同样也能直观地显示解压缩进度。
----下面就对这两个控件的使用方法及其重要属性作一简单介绍:
----1.控件注册
----首先将这两个控件连同许可文件addZIP.lic复制到windows\system目录下,或是你自己的控件库目录里。然后启动VFP,选择工具/选项/控件/ActiveX控件,按下添加按钮,将azip32.ocx和aunzip32.ocx注册。然后这两个控件就出现在ActiveX控件列表中了。注意,要将这两个控件名称左边的核选框选中,以确保它们能够被VFP使用。由于这两个控件需要MFC42.DLL和MSVCRT.DLL的支持,因此windows\system目录下还要有这两个文件。如果你开发的系统里使用了这两个控件,那么在定制安装程序时不要忘记把它们都添加进去。
----2.创建示例表单
----新建一个表单a,然后在表单控件工具条上单击查看类按钮,选择ActiveX。随后出现启用的ActiveX工具条,其中+Z图标就是压缩控件,-U图标就是解压缩控件。
----3.添加一个压缩控件
----通常要设置的属性如下:
----Abort:中断压缩过程的过程。
----Appearance:压缩控件的外观设置,0是平面方式,1是3D方式。本例采用默认值。
----ArchiveName:要生成的压缩文件名。本例设为test.zip。
----CompressionLevel:设置压缩速率。0是不压缩,1是最小压缩,2是通常方式压缩,3是最大方式压缩。默认值是2。本例采用默认值。Exclude:不压缩的文件。默认值是空,这里填*.bak。可以设置为排斥多种类型的文件:*.ini|*.bat|*.bak等等。
----Include:要压缩文件的类型。默认值是*.*(当前目录下的所有文件)。可以按照需要设置为*.dbf等等。本例采用默认值。
----IncludeListFile:要压缩文件的列表文件名,默认值为空。如果该属性设置为filename.txt,则应存在文件filename.txt,并且它的内容应当是要压缩的文件目录列表,每一项单独占一行,例如:
c:\data\*.*
d:\data\data\*.*
d:\data\code\*.*
d:\data\vcx\*.dat
----通过这种方法,可以一次压缩多个不同目录下的数据文件。本例设置为空。
----name:控件名称。本例设置为oZip。
----Password:压缩包的保护口令。如果想用口令保护压缩包,则必须填写口令。本例不填写。
----QueryDiskChange:在分盘压缩模式下,需要更换磁盘事件的方法。本例不作使用。
----QueryOverwrite:提示是否覆盖已经存在数据时的事件方法。本例使用控件的默认过程。
----recurse:是否压缩指定目录的子目录。默认值是.f.,本例设置为.T.。
----span:是否要进行分盘压缩。默认值是.f.。本例采用默认值。
----structure:存放数据的目录结构方式。0是不存放,1是相对路径,2是绝对路径。默认值是2,本例采用默认值。
----style:压缩进度的显示风格。0是标准风格,1是分段风格,2是色彩过渡风格。默认值是0。本例设置为1。
----segments:压缩进度条分段数目。默认值是10。本例采用默认值。
----ZipErrorEvent:压缩过程中发生的错误事件,用户可以在此设置自己的错误处理过程。本例使用控件的默认过程。
----ZipWarningEvent:压缩过程中发生的警告性事件,用户可以在此设置对警告事件的处理过程。本例使用控件的默认过程。
----ZippedEvent:压缩过程结束事件,用户可以在此设置提示压缩完成信息。本例使用控件的默认过程。
----ZippingEvent:压缩过程正在进行时的事件,用户可以在此设置提示正在压缩的信息。本例使用控件的默认过程。
----Update:更新压缩数据包。和Zip方法的作用基本相同,但只压缩已经发生变化的数据。
----Version:返回压缩控件的版本号。
----4.添加一个解压缩控件
----通常要设置的属性如下:
----Abort:中断解压缩过程的过程。
----Appearance:解压缩控件的外观设置,0是平面方式,1是3D方式。本例采用默认值。
----ArchiveName:要还原的压缩文件名,默认值为空。本例设为test.zip。
----ExtractTo:将数据恢复到哪个目录下,默认值为空。本例设为c:\。
----Exclude:不恢复的文件,默认值是空。本例使用默认值。
----Include:要恢复文件的类型。默认值是*.*(恢复压缩包中的所有文件)。本例使用默认值。
----name:控件名称。本例设置为oUnZip。
----Overwrite:是否覆盖同名的文件。10是逐一询问,11是覆盖所有的同名文件,12是不覆盖。本例使用默认值。
----Password:压缩包的保护口令。如果压缩包受口令保护,则必须填写相应的口令方可解压缩。本例不填写。
----QueryDiskChange:释放分盘压缩的数据包需要更换磁盘时的事件方法。本例使用控件的默认过程。
----QueryOverwrite:提示是否覆盖时的事件方法。本例使用控件的默认过程。
----RestoreStructure:是否按照数据的目录结构进行恢复。默认值是.F.,本例设置为.T.。
----style:解压缩进度显示风格。0是标准风格,1是分段风格,2是色彩过渡风格,默认值是0。本例设置为2。
----segments:解压缩进度条分段数目。默认值是10。本例采用默认值。
----Test:检测压缩文件是否正常。正常则返回.T.,否则返回.F.。
----Unzip:解压缩数据的方法。
----UnzipErrorEvent:解压缩过程中发生的错误事件,可以在此设置自己的错误处理过程。本例使用控件的默认过程。
----UnzipWarningEvent:解压缩过程中发生的警告性事件,可以在此设置对警告事件的处理过程。本例使用控件的默认过程。
----UnzippedEvent:解压缩过程结束事件,可以在此设置提示解压缩完成信息。本例使用控件的默认过程。
----UnzippingEvent:解压缩过程正在进行时的事件,可以在此设置提示正在解压缩的信息。本例使用控件的默认过程。
----Update:更新被释放的数据。和Unzip方法的作用基本相同,但只释放已经发生变化的数据。
----Version:返回解压缩控件的版本号。
----5.将这两个控件的外观都调整为进度条样式。
----6.添加按钮,调整属性如下:
----caption:压缩
----name:cmdZip
----为它的Click Event方法添加如下代码:
----THISFORM.oZip.update&&开始压缩当前目录下所有的数据=MESSAGEBOX('压缩完毕!')
----7.添加按钮,调整属性如下:
----caption:解压缩
----name:cmdUnzip
----为它的Click Event方法添加如下代码:
----THISFORM.oUnZip.ExtractTo="c:\tmp"
----&&将数据恢复到c盘的Tmp目录下。如果想原样恢复到D盘上,只需将该属性改为"d:\"即可。
----THISFORM.oUnZip.RestoreStructure=.T.
----&&按照原来的目录层次恢复数据
----THISFORM.oUnzip.update
----&&开始恢复指定的压缩包数据到当前目录下
----=MESSAGEBOX('恢复完毕!')
----8.运行表单a
----通过单击压缩按钮和解压缩按钮,可以看到压缩和解压缩的进度动态显示直到最终完成,并且用资源管理器可以看到test.zip文件的生成,以及在c:\tmp目录下恢复出现的当前数据(如果有子目录的话,同样会按原样恢复)。而且,用其他解压缩软件如pkunzip及zipmagic等也可以正确地释放test.zip文件。怎么样,是不是棒极了?
----从这里可以下载未注册的试用版(130KB)。对简单的压缩和恢复数据库工作来说,试用版就已经够用了。
本文来源:ComputerWorld 本文作者:王海军 王海涛
[返回] |