為VisualFoxPro應(yīng)用程序增加文件壓縮功能

字號(hào):

壓縮文件可以認(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