Zip文件操作
概述
.net的IO操作(System.IO.Compression)支持對zip文件的創建、讀寫和更新。
要求 :當.NET版本 大于或等于 .NET Framework 4.5.1 時才可用這個庫
要對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。
解壓
與創建壓縮文件相對,ZipFile類也公開了ExtractToDirectory方法,該方法的作用就是把指定.zip文件中的內容解壓到指定的目錄下。其中較簡單的一個重載如下:
static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName)
sourceArchiveFileName參數指定要解壓的zip文件的完整路徑或相對路徑;destinationDirectoryName參數指定一個目錄,被壓的內容就放到這個目錄下。
ZipArchive與ZipArchiveEntry
來看看如何掃描出.zip文件中的文件列表。
ZipFile類帶了兩個方法:要是只考慮對.zip文件進行只讀處理,調用OpenRead方法就可以了。如果希望對文件進只讀以外的處理,請調用Open方法。
不管你調用的是哪個方法,都會返回一個ZipArchive實例,它表示一個zip文檔,我們在代碼中可以對該文檔進行訪問或修改。
ZipArchive對象有個Entries屬性,表示zip文件中所包含的文件列表,類型只會把壓縮包中的文件視為一個實體,目錄不被作為實體處理。該屬性可以返回一個只讀的ZipArchiveEntry實例列表,列表中的每一個ZipArchiveEntry對象表示壓縮包中的一個文件,可以刪除。
ZipArchiveEntry類有幾個屬性可以獲取文件信息。
Name:文件名,不包含相對路徑。
FullName:包含相對路徑和文件名。
Length:壓縮前文件大小。
CompressedLength:壓縮后文件大小。
ICSharpCode.SharpZipLib
當.NET版本 小于 .NET Framework 4.5.1 時可以選擇用此庫
C# ICSharpCode.SharpZipLib.dll文件壓縮和解壓功能類整理,上傳文件或下載文件很常用

浙公網安備 33010602011771號