永远的.Net

无怨无悔.Net
posts - 1, comments - 0, trackbacks - 0, articles - 9

在线压缩文件

Posted on 2005-04-19 23:54 曾经的歌王 阅读(164) 评论(0)  编辑 收藏 所属分类: ASP.NET
方法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>

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-04-22 16:49 编辑过
 
另存  打印