要下载整个目录,一般方法是一个个文家下载或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>
本文地址:http://com.8s8s.com/it/it2151.htm