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();
}
}
圖例:
文章標籤
全站熱搜
