要下载整个目录,一般方法是一个个文家下载或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>
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18