.NET 2.0 的压缩功能代码

  在.net 1.1中我们要实现压缩这一功能,一般都是用open source的SharpZipLib 或者调用J#类库。

  现在在.net 2.0中增加了压缩功能,名字空间为 using System.IO.Compression;

  以下是使用示例:

  压缩字符串

  

复制代码 代码如下:

  public static string ZipString(string unCompressedString)

  {

  byte[] bytData = System.Text.Encoding.UTF8.GetBytes(unCompressedString);

  MemoryStream ms = new MemoryStream();

  Stream s = new GZipStream(ms, CompressionMode.Compress);

  s.Write(bytData, 0, bytData.Length);

  s.Close();

  byte[] compressedData = (byte[])ms.ToArray();

  return System.Convert.ToBase64String(compressedData, 0, compressedData.Length);

  }

  解压缩字符串

  

复制代码 代码如下:

  public static string UnzipString(string unCompressedString)

  {

  System.Text.StringBuilder uncompressedString = new System.Text.StringBuilder();

  byte[] writeData = new byte[4096];

  byte[] bytData = System.Convert.FromBase64String(unCompressedString);

  int totalLength = 0;

  int size = 0;

  Stream s = new GZipStream(new MemoryStream(bytData), CompressionMode.Decompress);

  while (true)

  {

  size = s.Read(writeData, 0, writeData.Length);

  if (size > 0)

  {

  totalLength += size;

  uncompressedString.Append(System.Text.Encoding.UTF8.GetString(writeData, 0, size));

  }

  else

  {

  break;

  }

  }

  s.Close();

  return uncompressedString.ToString();

  }

  压缩文件

  

复制代码 代码如下:

  public static bool AddZip(string srcFilename, string zipFileName)

  {

  if (!File.Exists(srcFilename))

  return false;

  bool result;

  FileStream fs = null, output = null;

  GZipStream zipStream = null;

  try

  {

  fs = new FileStream(srcFilename, FileMode.Open, FileAccess.Read);

  byte[] buffer = new byte[fs.Length];

  fs.Read(buffer, 0, buffer.Length);

  fs.Close();

  if (!File.Exists(zipFileName))

  {

  output = File.Create(zipFileName);

  zipStream = new GZipStream(output, CompressionMode.Compress);

  zipStream.Write(buffer, 0, buffer.Length);

  result = true;

  }

  else

  {

  result = false;

  }

  }

  catch(Exception)

  {

  result = false;

  }

  finally

  {

  if (zipStream != null)

  {

  zipStream.Flush();

  zipStream.Close();

  }

  }

  return result;

  }