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