網站建設| 數據庫類| 圖形圖象| 程序設計| 現代辦公| 操作系統| 考試認證| 網絡技術| 軟件工程| 電腦相關| 文學作品
網站開發| 網頁制作| 操作系統| 圖象圖形| 考試認證| 數據庫類| 程序設計| 硬件技術| 現代辦公| 網絡技術| 笑話頻道
 
您的位置: 電腦書庫首頁-> 電腦文摘-> 數據庫類-> 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在網絡環境下開發...
    山东11选5