壓縮文件可以認(rèn)為是一個(gè)包裝文件的容器。通過(guò)文件壓縮,大量文件可以被打包起來(lái)并當(dāng)作一個(gè)文件來(lái)看待。此外,壓縮文件在尺寸上普遍比原文件小,如文本文件在壓縮以后的平均大小是原來(lái)的40%。
因此,文件壓縮能夠大幅度的節(jié)省存儲(chǔ)空間和網(wǎng)絡(luò)傳輸時(shí)間,從而使得文件的攜帶和傳輸更加方便快捷。
在DOS環(huán)境下,經(jīng)常使用到的壓縮程序是ARJ、RAR和PKZIP/PKUNZIP。在Windows環(huán)境下,經(jīng)常使用到的壓縮軟件是WinZip和CleverZip。這些軟件基本上都是共享軟件,都可以從網(wǎng)絡(luò)上免費(fèi)獲取。
在數(shù)據(jù)庫(kù)應(yīng)用程序中,經(jīng)常需要對(duì)數(shù)據(jù)文件進(jìn)行壓縮備份或者從壓縮文件中恢復(fù)。以Visual FoxPro為例,通常的做法是通過(guò)FoxPro語(yǔ)句調(diào)用壓縮軟件,然后在該壓縮軟件的操作界面上進(jìn)行文件壓縮或者文件恢復(fù)。這種做法不僅在操作界面上非常不友好,而且大大地削弱了應(yīng)用程序的整體性。以下介紹的FoxPro程序利用了兩個(gè)共享的動(dòng)態(tài)鏈接庫(kù)AZIP.DLL和AUNZIP.DLL在Visual FoxPro內(nèi)部實(shí)現(xiàn)了文件壓縮與解壓縮功能,從而較好地解決了這個(gè)問(wèn)題。
文件壓縮程序
* 程序名稱:AZIP.PRG
* 程序說(shuō)明:在Visual FoxPro中實(shí)現(xiàn)文件壓縮
* 程序要求:AZIP32.DLL放置在Windows的System目錄或當(dāng)前目錄下
* 使用方法:USAGE: AZIP(lInitialize, sArchive, sInclFiles[, ZipParams])
* 參數(shù)說(shuō)明:
--lInitialize:.T. – 第一次使用本程序,.F. – 非第一次使用本程序
--sArchive: 帶有擴(kuò)展名的壓縮文件名,如"C:\THISFILE.ZIP"
--sInclFiles:需要壓縮的文件名稱,不同文件名之間有一個(gè)空格
例1: "D:\CUSTDATA.DBF"
例2: "C:\CUSTOMER.DBF D:\*.TXT D:\DATABASES\*.*"
--ZIPparams:文件壓縮參數(shù)[可選]
e(x) x = ’X’ 程度壓縮
x = ’0’ 無(wú)壓縮
x = ’S’ 最小程度壓縮
x = ’N’ 普通壓縮(缺?。?BR> P 包括目錄信息
S 使用密碼(必須是最后一部分)
* 示范語(yǔ)句:AZIP(.T., "ZIPFILE", "*.DBF *.TXT Customer.doc")
* 返回參數(shù):被壓縮的文件數(shù)目,如果沒有指定文件名則返回-1
* 接受參數(shù)
PARAMETERS lInitialize, sArchive, sInclFiles, ZIPparams
PRIVATE Params, sTemp
Params = PARAMETERS()
* 聲明需要調(diào)用的DLL函數(shù)并使當(dāng)前窗口獲得焦點(diǎn)
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)
* 如果使用的是本動(dòng)態(tài)鏈接庫(kù)的注冊(cè)版本,則可以添加下面一行
addZIP_Register("RegistrationName", RegistrationNumber)
* 其作用是在壓縮文件中使用密碼保護(hù)
* 如果沒有指定壓縮文件名,則返回0(沒有文件被壓縮)
IF Params < 2
RETURN 0
ENDIF
ENDIF
* 如果沒有指定被壓縮文件名,則響鈴并返回0(沒有文件被壓縮)
IF Params < 3
?? CHR(7)
MESSAGEBOX(’缺少操作參數(shù)!’,0, ’AZip 警告!’)
RETURN 0
ENDIF
因此,文件壓縮能夠大幅度的節(jié)省存儲(chǔ)空間和網(wǎng)絡(luò)傳輸時(shí)間,從而使得文件的攜帶和傳輸更加方便快捷。
在DOS環(huán)境下,經(jīng)常使用到的壓縮程序是ARJ、RAR和PKZIP/PKUNZIP。在Windows環(huán)境下,經(jīng)常使用到的壓縮軟件是WinZip和CleverZip。這些軟件基本上都是共享軟件,都可以從網(wǎng)絡(luò)上免費(fèi)獲取。
在數(shù)據(jù)庫(kù)應(yīng)用程序中,經(jīng)常需要對(duì)數(shù)據(jù)文件進(jìn)行壓縮備份或者從壓縮文件中恢復(fù)。以Visual FoxPro為例,通常的做法是通過(guò)FoxPro語(yǔ)句調(diào)用壓縮軟件,然后在該壓縮軟件的操作界面上進(jìn)行文件壓縮或者文件恢復(fù)。這種做法不僅在操作界面上非常不友好,而且大大地削弱了應(yīng)用程序的整體性。以下介紹的FoxPro程序利用了兩個(gè)共享的動(dòng)態(tài)鏈接庫(kù)AZIP.DLL和AUNZIP.DLL在Visual FoxPro內(nèi)部實(shí)現(xiàn)了文件壓縮與解壓縮功能,從而較好地解決了這個(gè)問(wèn)題。
文件壓縮程序
* 程序名稱:AZIP.PRG
* 程序說(shuō)明:在Visual FoxPro中實(shí)現(xiàn)文件壓縮
* 程序要求:AZIP32.DLL放置在Windows的System目錄或當(dāng)前目錄下
* 使用方法:USAGE: AZIP(lInitialize, sArchive, sInclFiles[, ZipParams])
* 參數(shù)說(shuō)明:
--lInitialize:.T. – 第一次使用本程序,.F. – 非第一次使用本程序
--sArchive: 帶有擴(kuò)展名的壓縮文件名,如"C:\THISFILE.ZIP"
--sInclFiles:需要壓縮的文件名稱,不同文件名之間有一個(gè)空格
例1: "D:\CUSTDATA.DBF"
例2: "C:\CUSTOMER.DBF D:\*.TXT D:\DATABASES\*.*"
--ZIPparams:文件壓縮參數(shù)[可選]
e(x) x = ’X’ 程度壓縮
x = ’0’ 無(wú)壓縮
x = ’S’ 最小程度壓縮
x = ’N’ 普通壓縮(缺?。?BR> P 包括目錄信息
S 使用密碼(必須是最后一部分)
* 示范語(yǔ)句:AZIP(.T., "ZIPFILE", "*.DBF *.TXT Customer.doc")
* 返回參數(shù):被壓縮的文件數(shù)目,如果沒有指定文件名則返回-1
* 接受參數(shù)
PARAMETERS lInitialize, sArchive, sInclFiles, ZIPparams
PRIVATE Params, sTemp
Params = PARAMETERS()
* 聲明需要調(diào)用的DLL函數(shù)并使當(dāng)前窗口獲得焦點(diǎn)
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)
* 如果使用的是本動(dòng)態(tài)鏈接庫(kù)的注冊(cè)版本,則可以添加下面一行
addZIP_Register("RegistrationName", RegistrationNumber)
* 其作用是在壓縮文件中使用密碼保護(hù)
* 如果沒有指定壓縮文件名,則返回0(沒有文件被壓縮)
IF Params < 2
RETURN 0
ENDIF
ENDIF
* 如果沒有指定被壓縮文件名,則響鈴并返回0(沒有文件被壓縮)
IF Params < 3
?? CHR(7)
MESSAGEBOX(’缺少操作參數(shù)!’,0, ’AZip 警告!’)
RETURN 0
ENDIF