利用SharpZipLib实现实时zip压缩下载整个目录

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

要下载整个目录,一般方法是一个个文家下载或ftp工具

现在用SharpZipLib就能实现实时zip压缩下载整个目录

SharpZipLib提供了多种压缩算法的支持,纯csharp代码,参见

http://www.icsharpcode.net/OpenSource/SharpZipLib/default.asp

原理是通过递归方法将每个文件压缩到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>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航