1.前言:
zlib是一個提供資料壓縮用的函式庫,zlib.net則是用C#改寫zlib而成,zlib.net不能產生或是解壓縮.zip的檔案類型,在應用上是將函式庫,資料集或是影像檔等以壓縮形式存在,當需要使用時,再進行解壓縮寫到資料流或檔案,是一種無失真資料壓縮方式。
2.說明:
zlib的說明請參考:
http://en.wikipedia.org/wiki/Zlib
原始的zlib壓縮元件由Jean-loup Gailly和Mark Adler編寫,可參考網址:
http://www.zlib.net/
zlib.net最新原始碼下載網址:
http://en.wikipedia.org/wiki/Zlib
本範例使用版本為zlib.net.dll 1.0.3.0
加入參考: zlib.net.dll
加入命名空間:
using zlib;
程式碼:
private void btCompress_Click(object sender, EventArgs e) { compressFile(@"d:\tmp\gpl.txt", @"d:\tmp\gpl.txt.compressed"); } private void btDecompress_Click(object sender, EventArgs e) { decompressFile(@"d:\tmp\gpl.txt.compressed", @"d:\tmp\gpl-1.txt"); } public static void CopyStream(Stream input, Stream output) { byte[] buffer = new byte[2048]; int len; while ((len = input.Read(buffer, 0, 2048)) > 0) { output.Write(buffer, 0, len); } output.Flush(); } private void compressFile(string inFile, string outFile) { FileStream outFileStream = new FileStream(outFile, FileMode.Create); zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream, zlib.zlibConst.Z_DEFAULT_COMPRESSION);//預設壓縮 //zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream, zlib.zlibConst.Z_BEST_COMPRESSION);//最佳壓縮 //zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream, zlib.zlibConst.Z_BEST_SPEED);//最佳速度 FileStream inFileStream = new FileStream(inFile, FileMode.Open); try { CopyStream(inFileStream, outZStream); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { outZStream.Close(); outFileStream.Close(); inFileStream.Close(); } } private void decompressFile(string inFile, string outFile) { FileStream outFileStream = new FileStream(outFile, FileMode.Create); zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream); FileStream inFileStream = new FileStream(inFile, FileMode.Open); try { CopyStream(inFileStream, outZStream); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { outZStream.Close(); outFileStream.Close(); inFileStream.Close(); } }
圖例:
文章標籤
全站熱搜