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...