基于ASP.NET中文件的压缩与解压

2010-09-10 14:15:46来源:作者:

  这里笔者为大家介绍在asp.net中使用文件的压缩与解压。在asp.net中使用压缩给大家带来的好处是显而易见的,首先是减小了服务器端文件存储的空间,其次下载时候下载的是压缩文件想必也会有效果吧,特别是比较大的

  这里笔者为大家介绍在asp.net中使用文件的压缩与解压。在asp.net中使用压缩给大家带来的好处是显而易见的,首先是减小了服务器端文件存储的空间,其次下载时候下载的是压缩文件想必也会有效果吧,特别是比较大的文件。有的客户可能会很粗心上传的是文件,那么可以通过判断后缀名来判断文件,不是压缩文件,就可以压缩文件,在存储。

  这里笔者引用了一个DLL文件(ICSharpCode.SharpZipLib.dll)(包含在本文代码中),调用其中的函数,就可以对文件进行压缩及解压了。其中压缩笔者主要用到的函数是

C# Code复制内容到剪贴板
  1. // <summary>   
  2.          /// 压缩文件   
  3.          /// </summary>   
  4.          /// <param name="fileName">要压缩的所有文件(完全路径)</param>   
  5.          /// <param name="name">压缩后文件路径</param>   
  6.         /// <param name="Level">压缩级别</param>   
  7.           public void ZipFileMain(string[] filenames, string name, int Level)   
  8.          {   
  9.              ZipOutputStream s = new ZipOutputStream(File.Create(name));   
  10.              Crc32 crc = new Crc32();   
  11.              //压缩级别   
  12.              s.SetLevel(Level); // 0 - store only to 9 - means best compression   
  13.              try  
  14.              {   
  15.                  foreach (string file in filenames)   
  16.                  {   
  17.                      //打开压缩文件                     FileStream fs = File.OpenRead(file);   
  18.                      byte[] buffer = new byte[fs.Length];   
  19.                      fs.Read(buffer, 0, buffer.Length);   
  20.                                           //建立压缩实体                     ZipEntry entry = new ZipEntry(System.IO.Path.GetFileName(file));   
  21.                      //时间                     entry.DateTime = DateTime.Now;   
  22.                     // set Size and the crc, because the information   
  23.                      // about the size and crc should be stored in the header   
  24.                      // if it is not set it is automatically written in the footer.   
  25.                      // (in this case size == crc == -1 in the header)                     // Some ZIP programs have problems with zip files that don't store   
  26.                      // the size and crc in the header.   
  27.                      //空间大小                     entry.Size = fs.Length;   
  28.                      fs.Close();   
  29.                      crc.Reset();   
  30.                      crc.Update(buffer);   
  31.                      entry.Crc = crc.Value;   
  32.                      s.Write(buffer, 0, buffer.Length);   
  33.                  }   
  34.              }   
  35.              catch  
  36.              {   
  37.                  throw;   
  38.              }   
  39.              finally  
  40.        {   
  41.                  s.Finish();   
  42.                  s.Close();   
  43.              }   
  44.          }  

  解压缩的主要代码

C# Code复制内容到剪贴板
  1. /// <summary>   
  2.          /// 解压文件   
  3.          /// </summary>   
  4.         /// <param name="ZipPath">被解压的文件路径</param>   
  5.          /// <param name="Path">解压后文件的路径</param>   
  6.          public void UnZip(string ZipPath,string Path)   
  7.          {   
  8.              ZipInputStream s = new ZipInputStream(File.OpenRead(ZipPath));   
  9.             ZipEntry theEntry;   
  10.             try  
  11.                  while ((theEntry = s.GetNextEntry()) != null)   
  12.                  {   
  13.                      string fileName = System.IO.Path.GetFileName(theEntry.Name);   
  14.                      //生成解压目录                     Directory.CreateDirectory(Path);   
  15.                     if (fileName != String.Empty)   
  16.                      {   
  17.                          //解压文件                         FileStream streamWriter = File.Create(Path + fileName);   
  18.                         int size = 2048;   
  19.                          byte[] data = new byte[2048];   
  20.                          while (true)                         {   
  21.                             size = s.Read(data, 0, data.Length);   
  22.                              if (size > 0)                             {   
  23.                                  streamWriter.Write(data, 0, size);   
  24.                              }                            else  
  25.                              {   
  26.                                 streamWriter.Close();   
  27.                                  streamWriter.Dispose();   
  28.                                  break;   
  29.                              }                         }   
  30.                          streamWriter.Close();   
  31.                          streamWriter.Dispose();   
  32.                      }   
  33.                  }   
  34.              }   
  35.              catch  
  36.              {   
  37.                  throw;   
  38.              }   
  39.              finally  
  40.              {   
  41.                  s.Close();   
  42.                  s.Dispose();   
  43.              }   
  44.          }   
  45.      }  

  我这里做了个简单的测试程序(点击下载)

1
 

  这里已知道要被压缩文件,这里只需填入要被压缩到的路径("D:\text\")解压路径一样。这里解压级别越大,压缩的就越厉害。

  可以看测试小程序,将解压/压缩引入到你的项目中。

关键词:ASP.NET

赞助商链接: