程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 【.NET深呼吸】Zip文件操作(1):創建和讀取zip文檔

【.NET深呼吸】Zip文件操作(1):創建和讀取zip文檔

編輯:關於.NET

.net的IO操作支持對zip文件的創建、讀寫和更新。使用起來也比較簡單,.net的一向作風,東西都准備好了,至於如何使用,請看著辦。

要對zip文件進行操作,主要用到以下三個類:

1、ZipFile。表示與一個zip文件操作相關的類。可以使用該類創建zip文件,或者打開zip文件。

2、ZipArchive。表示一個zip文檔實例,可以通過它直接從流對象創建zip文檔。ZipFile類主要是針對磁盤文件來進行操作,而ZipArchive表示的是zip包,不一定是存放在硬盤上的.zip文件,因為它可以基於流來創建,所以可以是存在於內存中,或者用於網絡傳輸的數據。

3、ZipArchiveEntry。文檔項實體。表示zip壓縮包中的一個文件實體。zip文檔中以文件為項實體,如果存在目錄結構,就以當前文檔為根,用相對路徑來描述文件實體。比如:\目錄1\目錄2\文件1。

 

首先看一下如何從現有目錄(包含該目錄下的所有內容)來創建新的.zip文件。ZipFile類公開了CreateFromDirectory方法,這個方法有幾個重載,如果不考慮其他因素,只是簡單創建.zip文件,可以使用以下重載:

static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)

方法不返回內容,sourceDirectoryName參數指定要用來創建壓縮文檔的源目錄,destinationArchiveFileName就是新創建的壓縮文件的完整路徑,如c:\abc.zip。

如果想控制壓縮級別,可以使用以下重載:

void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory)

compressionLevel參數表示壓縮的層次,includeBaseDirectory參數表示是否把sourceDirectoryName中的目錄名也放到.zip文件的根中,如果是就為true,否則為false。

 

看看例子:

            try
            {
                ZipFile.CreateFromDirectory(textBox1.Text, textBox2.Text);
                msg = "操作成功。";
            }
            catch (Exception ex)
            {
                msg = ex.Message;
            }
            MessageBox.Show(msg, "提示", MessageBoxButtons.OK);

 是不是很簡單。

 

========================================================

下面再看看如何解壓。與創建壓縮文件相對,ZipFile類也公開了ExtractToDirectory方法,該方法的作用就是把指定.zip文件中的內容解壓到指定的目錄下。其中較簡單的一個重載如下:

static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName)

sourceArchiveFileName參數指定要解壓的zip文件的完整路徑或相對路徑;destinationDirectoryName參數指定一個目錄,被壓的內容就放到這個目錄下。

請看例子:

            try
            {
                ZipFile.ExtractToDirectory(txtZipFile.Text, txtDestDir.Text);
                msg = "解壓成功。";
            }
            catch (Exception ex)
            {
                msg = ex.Message;
            }
            MessageBox.Show(msg, "提示", MessageBoxButtons.OK);

 在操作時應當把代碼放在try語句塊中,畢竟很難保證不發生意外。

 

======================================================

最後,來看看如何掃描出.zip文件中的文件列表。ZipFile類帶了兩個方法:要是只考慮對.zip文件進行只讀處理,調用OpenRead方法就可以了。如果希望對文件進只讀以外的處理,請調用Open方法。

不管你調用的是哪個方法,都會返回一個ZipArchive實例,它表示一個zip文檔,我們在代碼中可以對該文檔進行訪問或修改。ZipArchive對象有個Entries屬性,表示zip文件中所包含的文件列表,類型只會把壓縮包中的文件視為一個實體,目錄不被作為實體處理。該屬性可以返回一個只讀的ZipArchiveEntry實例列表,列表中的每一個ZipArchiveEntry對象表示壓縮包中的一個文件。

ZipArchiveEntry類有幾個屬性可以獲取文件信息。

 Name:文件名,不包含相對路徑。

FullName:包含相對路徑和文件名。

Length:壓縮前文件大小。

CompressedLength:壓縮後文件大小。

 

請看下面例子:

            try
            {
                // 打開zip文件
                ZipArchive archive = ZipFile.OpenRead(txtInputFile.Text);
                // 獲取文件列表
                var files = archive.Entries;
                // 顯示列表
                lbFiles.ItemsSource = files;
                msg = "讀取成功。";
            }
            catch (Exception ex)
            {
                msg = ex.Message;
            }

 

上面代碼讀取一個.zip文件,並列表壓縮文檔中的文件對象。結果如下圖所示。

 

另外,ZipArchiveEntry類還定義了ExtractToFile擴展方法,使用該擴展方法,可以把壓縮包中的某個文件解壓出來。

 

好了,今天就吹到這裡吧。

 

本文示例源碼下載

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved