永远的.Net

无怨无悔.Net

导航

在线压缩文件

Posted on 2005-04-19 23:54  曾经的歌王  阅读(581)  评论(0)    收藏  举报
方法1:调用winrar
 System.Diagnostics.ProcessStartInfo info= new
System.Diagnostics.ProcessStartInfo(@"C:\Program
Files\WinRAR\WinRAR.exe",@"a -r D:\test.rar D:\test");
   info.WindowStyle=System.Diagnostics.ProcessWindowStyle.Normal;
   System.Diagnostics.Process.Start(info);

方法2:调用SharpZipLib
      SharpZipLib提供了多种压缩算法的支持。
      原理是通过递归方法将每个文件压缩到ZipOutputStream,然后下载

      代码和范例如下:

      <%@ Import namespace="ICSharpCode.SharpZipLib.Zip" %>
      <%@ Import Namespace="System.IO" %>
      <script language="c#" runat="server">
       ZipOutputStream zos=null;
       String strBaseDir="";
       void dlZipDir(string strPath,string strFileName){
        MemoryStream ms =null;
        Response.ContentType = "application/octet-stream";
        strFileName=HttpUtility.UrlEncode(strFileName).Replace('+',' ');
        Response.AddHeader("Content-Disposition", "attachment; filename=" +
strFileName+".zip");
        ms = new MemoryStream();
        zos = new ZipOutputStream(ms);
        strBaseDir=strPath+"\\";
        addZipEntry(strBaseDir);
        zos.Finish();
        zos.Close();
        Response.Clear();
        Response.BinaryWrite(ms.ToArray());
        Response.End();
       }

       void addZipEntry(string PathStr){
        DirectoryInfo di= new DirectoryInfo(PathStr);
        foreach(DirectoryInfo item in di.GetDirectories()){
         addZipEntry(item.FullName);
        }
        foreach(FileInfo item in di.GetFiles()){
         FileStream fs = File.OpenRead(item.FullName);
         byte[] buffer = new byte[fs.Length];
         fs.Read(buffer, 0, buffer.Length);
         string strEntryName=item.FullName.Replace(strBaseDir,"");
         ZipEntry entry = new ZipEntry(strEntryName);
         zos.PutNextEntry(entry);
         zos.Write(buffer, 0, buffer.Length);
         fs.Close();
        }
       }
       void Page_Load(){
        dlZipDir(Server.MapPath("."),"test");
       }
      </script>