在做網絡傳輸文件的小例子的時候,當傳輸的文件比較大的時候,我們通常都是將文件經過壓縮之后才進行傳輸,以前都是利用第三方插件來對文件進行壓縮的,但是現在我發現了c#自帶的類庫也能夠實現文件的壓縮,實際上是對數據的壓縮吧,為什么說是對具體的數據經行壓縮了,請看下面實現壓縮的代碼吧。
注意在用c#自帶的類庫實現文件壓縮和解壓的時候需要添加下面的引用:
using System.IO.Compression;
using System.IO;
壓縮文件的代碼如下:
/// <summary> ///壓縮文件 /// </summary> /// <param name="filePath">需要被壓縮文件的路徑</param> private void FileCompression(string filePath) { StreamReader sr = new StreamReader(filePath); //讀取出文件中的內容來。 string data=sr.ReadToEnd(); //壓縮文件的后綴名可以隨意起。 FileStream filedata = new FileStream("myCompression.mZP", FileMode.Create, FileAccess.Write); GZipStream zip = new GZipStream(filedata, CompressionMode.Compress); StreamWriter sw = new StreamWriter(zip); //將文件的內容寫入到壓縮的流當中 sw.Write(data); zip.Close(); sr.Close(); filedata.Close(); //關閉流一定要按照流的順序來,否則會出現異常:無法訪問已關閉的文件。 // zip.Close(); }
然后實現解壓的代碼與上面類似
解壓文件的代碼如下:
private void fileDeCompression() { //將以壓縮的文件變為一個文件流 FileStream fileCompression = File.OpenRead("myCompression.mZP"); GZipStream gzp = new GZipStream(fileCompression, CompressionMode.Decompress); StreamReader sr = new StreamReader(gzp); //讀取出解壓后的數據 string data = sr.ReadToEnd(); MessageBox.Show(data); gzp.Close(); fileCompression.Close(); sr.Close(); }
通過使用上面的兩個方法即可實現對文件或者是數據的壓縮和解壓。
使用自帶的類也會存在一些缺點:無法對文件夾經行壓縮。