perl提供大量處理不同文件格式的內置函數和外來模塊。特別是,它可以通過archive::zip模塊,動態建立和閱讀zip壓縮文件,而不必依賴外來工具和實用工具。本教程說明這個模塊的基礎理論和常用方法。
首先,在perl提示符下運行以下命令下載并安裝該模塊(如果你還沒有安裝它):
perl> perl -mcpan -e "install archive::zip"
注意,archive::zip模塊依靠zlib庫運行,因此在安裝過程中,系統可能要求你下載并安裝這個庫。
建立zip壓縮文件
首先我們看一個簡單的例子。動態建立一個包含幾個其它文件的zip壓縮文件。輸入(或復制)如列表a所示的腳本:
列表a
這段腳本相當簡單,但值得仔細看一看。第一步是輸入archive::zip模塊,并初始化archive::zip對象的一個實例。接下來,將所有文件清單以及它們在磁盤中的位置進行壓縮,保存為一個perl數組。要記住的是,腳本(準確地說,運行腳本的用戶)必須擁有訪問這些磁盤位置的許可,否則建立壓縮文件的過程就會失敗。
然后,用foreach()循環遍歷這個數組,用對象的addfile()方法在壓縮文件中增加列出的文件。一旦循環完成,則通過調用writetofilenamed()方法把最終的壓縮文件寫入磁盤,writetofilenamed()方法接受所建立的zip文件的完整路徑和名稱。記住,腳本必須擁有向指定的磁盤位置寫入文件的許可;否則,writetofilenamed()方法將會失敗,因而不能建立壓縮文件。
特別要注意調用writetofilenamed():方法的返回值。如果文件被正確寫入,archive::zip返回一個az_ok值,在往后操作前系統會檢查這個值。之后在這個文件中你還會看到這個返回值。
要應用上面的腳本實例,請修改@files數組的內容以反映你的當地系統配置,并試圖在命令提示符或瀏覽器中執行它。如果一切運行正常,這段腳本應該會找到并將所有文件讀入一個叫做dummy.zip的文件中。
|||查看zip壓縮文件內容
如何查看一個現有的壓縮文件呢?archive::zip帶有一個read()方法,可以閱讀一個壓縮文件的內容,并可訪問與單個文件有關的詳細信息。列表b是它的一個應用實例:
列表b
這里,read()方法用于閱讀zip壓縮文件并獲得與其內容有關的信息。然后,調用members()方法返回一個結構化對象數組,每個數組元素代表壓縮文件中的一個單獨文件。通常來說,數組中的每個對象包含相應文件的名稱信息、它的許可模式、狀態、壓縮類型、大小以及最后一次修改時間。我們可以用一個循環方便地提供這些信息,并對它們重新格式化,使它更具可讀性,如上面的列表b所示。
以下是一個輸出結果樣本:
mystuff/ad.gif, 1447:345
mystuff/alcon.doc, 200:34
mystuff/alcon.xls, 28580:21483
…
在現有zip壓縮文件中插入文件
如果你已經有一個zip壓縮文件,只需要往其中增加一個新文件,那么操作過程就相當簡單:只要調用addfile()方法,增加文件的名稱和路徑即可。為說明這一點,我們回到dummy.zip文件,并試圖給它增加一些新文件。(列表c)
列表c
在一個現有壓縮文件中插入一個文件的過程與建立一個新壓縮文件非常相似:首先初始化一個新的archive::zip對象,在其中讀入原始的壓縮文件,再建立一個包含增加文件清單的數組,并把這個數組提交給循環中的addfile()方法。成功添加文件后,就可以用overwrite()方法用更新后的壓縮文件覆蓋原始的壓縮文件。
從現有的zip壓縮文件中提取文件
往壓縮文件中添加文件后,如何將它們提取出來呢?很明顯,使用extracttree()方法!這個方法允許你把現有壓縮文件中的所有文件提取到一個指定的目錄中,如列表d所示:
列表d
在上例中,extracttree()方法解壓整個壓縮文件,將其中的所有文件提取到一個指定目錄中。如果這個目錄不存在,extracttree()方法將自動建立這個目錄;當然,這以腳本獲得寫磁盤的許可為前提。
有趣的是,你還可以進行更具選擇性的提取操作,只提取與一個預先定義的列表相匹配的文件。要完成這個任務,你需要使用extractmember()方法,它逐個提取壓縮文件,幫助你安置一個中間過濾器或在繼續提取前執行檢查。在模塊文檔中可以找相關實例。
靈活性
如上面的例子所示,perl的archive::zip類的功能相當強大,為你處理zip壓縮文件提供很大的靈活性。希望上面的腳本樣本提起你的興趣,讓你開始自己應用這個類,更一步了解它的運行機制。祝編程快樂!
新聞熱點
疑難解答