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();
	}
}

圖例:

zlibnet  

arrow
arrow
    文章標籤
    C# zlib.net zlib
    全站熱搜

    西夏普 發表在 痞客邦 留言(0) 人氣()