添加引用 using System.IO.Compression;
代碼如下:
/// <summary>
/// 擷取資料壓縮後的位元組碼
/// </summary>
public byte[] Compress(DataSet dt)
{
try
{
// 聲明MemoryStream
MemoryStream ms = new MemoryStream();
// 寫入DataSet中的資料到ms中
dt.WriteXml(ms, XmlWriteMode.WriteSchema);
// ms轉換為數組序列
byte[] bsrc = ms.ToArray();
//關閉ms并釋放資源
ms.Close();
ms.Dispose();
ms = new MemoryStream();
ms.Position = 0;
// 壓縮數組序列中的資料
DeflateStream zipStream = new DeflateStream(ms, CompressionMode.Compress);
zipStream.Write(bsrc, 0, bsrc.Length);
zipStream.Close();
zipStream.Dispose();
return ms.ToArray();
}
catch
{
return null;
}
}
/// <summary>
/// 擷取對象壓縮後的位元組碼
/// </summary>
public byte[] Compress(string str)
{
try
{
// ms讀取傳入的str并轉存如數組序列中
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
sw.Write(str);
sw.Close();
byte[] bsrc = ms.ToArray();
ms.Close();
ms.Dispose();
ms = new MemoryStream();
ms.Position = 0;
// 壓縮數組序列并傳回壓縮後的數組
DeflateStream zipStream = new DeflateStream(ms, CompressionMode.Compress);
zipStream.Write(bsrc, 0, bsrc.Length);
zipStream.Close();
zipStream.Dispose();
return ms.ToArray();
}
catch
{
return null;
}
}
/// <summary>
/// 擷取解壓縮後的資料集
/// </summary>
public DataSet DeCompress(byte[] arrbts)
{
try
{
//
MemoryStream ms = new MemoryStream();
ms.Write(arrbts, 0, ArrBytes.Length);
ms.Position = 0;
//
DeflateStream ZipStream = new DeflateStream(ms, CompressionMode.Decompress);
MemoryStream UnzipStream = new MemoryStream();
byte[] sDecompressed = new byte[128];
while (true)
{
int bytesRead = ZipStream.Read(sDecompressed, 0, 128);
if (bytesRead == 0)
{
break;
}
UnzipStream.Write(sDecompressed, 0, bytesRead);
}
ZipStream.Close();
ms.Close();
UnzipStream.Position = 0;
DataSet ds = new DataSet();
// 讀取解壓後xml資料
ds.ReadXml(UnzipStream);
ds.AcceptChanges(); //更新所有行的狀态為初始狀态
return ds;
}
catch
{ return null; }
}
/// <summary>
/// 擷取解壓縮後的字元串
/// </summary>
public string DeCompressString(byte[] arrbts)
{
try
{
MemoryStream ms = new MemoryStream();
ms.Write(arrbts, 0, ArrBytes.Length);
ms.Position = 0;
DeflateStream ZipStream = new DeflateStream(ms, CompressionMode.Decompress);
MemoryStream UnzipStream = new MemoryStream();
byte[] sDecompressed = new byte[128];
while (true)
{
int bytesRead = ZipStream.Read(sDecompressed, 0, 128);
if (bytesRead == 0)
{
break;
}
UnzipStream.Write(sDecompressed, 0, bytesRead);
}
ZipStream.Close();
ms.Close();
UnzipStream.Position = 0;// 解壓起始位置設定為頭
StreamReader sr = new StreamReader(UnzipStream);
return sr.ReadToEnd();
}
catch
{
return "";
}
}