.net中有自带的打包下载文件的类库、可以使用这些类库自己写打包下载方法、在使用这些类库钱需先引用WindowBase文件
public class down
{public string SourceFolderPath { get; set; }
public down()
{
}
//写一个构造函数,用来接收要执行压缩的文件路径
public down(string sourceFolderPath) {
SourceFolderPath = sourceFolderPath;
}
//创建一个方法ZipFolder,用来执行实际的压缩操作。在这个方法里面创建一个Package的实例
public void ZipFolder(string zipFolderFile)
{
using(Package packge=Package.Open(zipFolderFile,System.IO.FileMode.Create)){
DirectoryInfo di = new DirectoryInfo(SourceFolderPath);
zipDirectory(di,packge);
}
}
//创建一个函数ZipDirectory,用来递归遍历所有的子目录和子文件夹
private void zipDirectory(DirectoryInfo di, Package packge)
{
foreach (FileInfo fi in di.GetFiles())
{
string relativepath = fi.FullName.Replace(SourceFolderPath,String.Empty);
relativepath = relativepath.Replace("\\","/");
PackagePart packpart = packge.CreatePart(new Uri(relativepath,UriKind.Relative),System.Net.Mime.MediaTypeNames.Application.Zip);
//复制源文件的内容到Package里面,为此需要添加一个CopyStream方法
using(FileStream fs=fi.OpenRead())
{
CopyStream(fs, packpart.GetStream());
}
}
foreach (DirectoryInfo subdi in di.GetDirectories())
{
zipDirectory(subdi,packge);
}
}
private void CopyStream(Stream source,Stream target)
{
const int bufsize = 0x1000;
byte[] buf = new byte[bufsize];
int bytesRead = 0;
while ((bytesRead = source.Read(buf, 0, bufsize)) > 0)
{
target.Write(buf,0,bytesRead);
}
}
}
在调用页面
down down = new down(源路径);
down.ZipFolder(@"f:\zipfiles\myimges.zip");
注:该方法是下载整个文件夹下面的文件、若打包下载指定的文件需做调整