C 實現壓縮與解壓縮方案

2021-10-09 20:47:57 字數 3995 閱讀 9654

c#實現壓縮與解壓的方案有很多,比如以下幾種:

1. ionic.zip (第三方 太老、不支援記憶體壓縮)(網上有使用例子:

2. sharpziplib和dotnetzip (第三方,一款比較經典實用c#壓縮類庫)

3. ziparchive 和 zipfile(.net 4.5 system.io.compression命名空間中新提供的壓縮類)(以下是該方案的實現例子)

在 4.5 之前,處理壓縮檔案,我們經常需要使用第三方的類庫 sharpziplib, 現在可以直接實現了。

首先做一下準備工作,需要確保你使用 .net 4.5 版,可以在專案的屬性視窗中檢查一下。

然後,引用必須的程式集。

程式集有兩個:system.io.compression 和 system.io.compression.filesystem.

類似於對檔案和目錄的操作,對於壓縮檔案也提供了兩種方式:ziparchive 和 zipfile,分別對應兩個新增加的類 ziparchive 和 zipfile。這兩個類都定義在命名空間 system.io.compression 中。

為了後面演示方便,我們定義乙個表示壓縮檔案路徑的常量。

const string zipfilepath = @"..\..\sample.zip";
先看ziparchive的使用。

建立乙個空的壓縮檔案,使用 ziparchivemode.create 建立引數。

// 建立 zip 檔案

using (filestream zipfiletoopen = new filestream(zipfilepath, filemode.create))

using (ziparchive archive = new ziparchive(zipfiletoopen, ziparchivemode.create))

使用 winrar 開啟壓縮檔案,可以看到裡面沒有檔案。

通常,在建立的同時,我們就會加入一些檔案,下面的例子中,我們將當前的執行程式檔案本身加到壓縮檔案中。

// 建立並新增被壓縮檔案

using (filestream zipfiletoopen = new filestream(zipfilepath, filemode.create))

using (ziparchive archive = new ziparchive(zipfiletoopen, ziparchivemode.create))

}

現在,開啟壓縮檔案,可以看到檔案已經被壓縮進來了。

當然,也可以通過程式檢查壓縮檔案的內容了。使用 read 方式就可以了。

// 列出壓縮壓縮檔案

using (filestream zipfiletoopen = new filestream(zipfilepath, filemode.open))

using (ziparchive archive = new ziparchive(zipfiletoopen, ziparchivemode.read))

", ziparchiveentry.fullname);}

當然可以從壓縮檔案中提取被壓縮的內容了。

// 讀取其中乙個檔案的內容

using (filestream zipfiletoopen = new filestream(zipfilepath, filemode.open))

using (ziparchive archive = new ziparchive(zipfiletoopen, ziparchivemode.read))

output.close();}}

在壓縮檔案已經建立之後,還可以開啟它,繼續新增檔案,這就稱為更新了,使用 update 模式。

// 向現有的壓縮檔案中新增檔案

using (filestream zipfiletoopen = new filestream(zipfilepath, filemode.open))

using (ziparchive archive = new ziparchive(zipfiletoopen, ziparchivemode.update))

foreach (var ziparchiveentry in archive.entries)

console.writeline(

"fullname of the zip archive entry: ", ziparchiveentry.fullname);}

現在壓縮檔案中又增加了乙個,這可以乙個怪異的檔案,同乙個檔案被在壓縮檔案中新增了兩次!

除了上邊的基本方法之外,還有一些簡單的使用方法。這涉及到另外乙個類:zipfile。

// 刪除壓縮檔案

system.io.file.delete(zipfilepath);

// 使用 zipfile 的靜態方法建立壓縮檔案,要保證檔案沒有存在

using (ziparchive ziparchive = zipfile.open(zipfilepath, ziparchivemode.create))

直接新增乙個檔案的方法。直接使用 createentryfromfile 就可以了。

system.io.file.delete(zipfilepath);

// 使用 createentryfromfile 方法新增檔案

// 使用 zipfile 的靜態方法建立壓縮檔案

using (ziparchive ziparchive = zipfile.open(zipfilepath, ziparchivemode.create))

將壓縮檔案解壓到指定的目錄中。

// 解壓檔案

zipfile.extracttodirectory(zipfilepath, "../..");

還可以直接將乙個目錄中所有的檔案都壓縮到乙個壓縮檔案中。

// 壓縮指定目錄中所有檔案

system.io.file.delete(zipfilepath);

zipfile.createfromdirectory(".", zipfilepath);

你是不是最喜歡這個方法?現在壓縮檔案中的檔案更多了。

//控制器寫法

public fileresult printdata()}}

//

using (var fs = system.io.file.openread(file))

}response.close();

附錄:

壓縮與解壓縮

1 compress和uncompress 壓縮或者解壓縮資料,壓縮後檔案自動加上副檔名.z 2 gzip gunzip 壓縮解壓縮檔案,gz,比compress有效 例如 gzip ye.txt 壓縮ye.tar檔案,並且壓縮後副檔名加長ye.txt.gz gzip d ye.txt.gz 解壓縮...

壓縮與解壓縮

zip命令可以用來將檔案壓縮成為常用的zip格式。unzip命令則用來解壓縮zip檔案。1.我想把乙個檔案abc.txt和乙個目錄dir1壓縮成為yasuo.zip zip r yasuo.zip abc.txt dir1 unzip yasuo.zip 3.我當前目錄下有abc1.zip,abc2...

壓縮與解壓縮

壓縮 tar cvf jpg.tar jpg 將目錄裡所有jpg檔案打包成tar.jpg tar czf jpg.tar.gz jpg 將目錄裡所有jpg檔案打包成jpg.tar後,並且將其用gzip壓縮,生成乙個gzip壓縮過的包,命名為jpg.tar.gz tar cjf jpg.tar.bz2...