111,093
社区成员




using (MemoryStream stream = new MemoryStream())
{
using (ZipArchive zip = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
zip.CreateEntry("filename").Open().Write(...);
}
return stream;
}这只是一个简单的例子,中间的Dispose/using自己处理。
//zip文件输出流
static ZipOutputStream zos = null;
//压缩附件
public static void downloadAttach(string filePath, string strFileName, HttpResponse response)
{
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);
addZipEntry(filePath);
zos.Finish();
zos.Close();
response.Clear();
response.BinaryWrite(ms.ToArray());
response.End();
}
//添加文件至压缩包
private static 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(PathStr, "");
ZipEntry entry = new ZipEntry(strEntryName);
zos.PutNextEntry(entry);
zos.Write(buffer, 0, buffer.Length);
fs.Close();
}
}