使用微软自带 SharpZipLib 进行多文件 压缩
/// <summary>
/// 指定路径打包下载
/// </summary>
/// <param name="fileName"></param>
/// <param name="filePath"></param>
public void ZIPfiles(DataTable dt)
{ //string filename = "开店日期(正常).xlsx";
//string filepath = "C:/ExportFolder/CADD87B4EDBE28A47669673F53DEC8458A998D5B84EEAA88EE6647CA6DF1D1E8.xlsx";
string ZipName = string.Empty;
MemoryStream ms = new MemoryStream();
Encoding gb2312 = Encoding.GetEncoding("gb2312"); //对方英文服务器 进行转码
ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gb2312.CodePage;//上面和这一句是为了防止真是坏境是英文服务器出现中文乱码的问题。
ZipOutputStream zos = new ZipOutputStream(ms);
FileStream fs = null;
// byte[] buffer = null;
System.IO.BinaryReader br = null; try
{
if (dt.Rows.Count > )
{
//防止名称重复 这一段肯定是有点消耗性能的 暂时没有找出更好的方法改进。 请各位大神有好的意见 说一下。
for (int i = dt.Rows.Count - ; i > ; i--)
{
int a = ;
string title = dt.Rows[]["fileName"].ToString();
Logger.Log.Debug(title);
for (int j = i + ; j > ; j--)
{
if (dt.Rows[j]["fileName"].ToString() == title)
{
a++;
dt.Rows[j]["fileName"] = title + "("+a+")"; }
Logger.Log.Debug(dt.Rows[j]["fileName"]);
} } foreach (DataRow dr in dt.Rows)
{
Logger.Log.Debug(dr["filePath"].ToString());
fs = new FileStream(dr["filePath"].ToString(), System.IO.FileMode.Open);//文件地址、
// fs = new FileStream(filepath, System.IO.FileMode.Open);//文件地址
br = new BinaryReader((Stream)fs);
byte[] buffer = br.ReadBytes((Int32)fs.Length);
ZipEntry entry = new ZipEntry(dr["fileName"].ToString());//文件名
//ZipEntry entry = new ZipEntry(filename);//文件名
zos.PutNextEntry(entry);//UTF-8
zos.Write(buffer, , buffer.Length);
fs.Close(); //每一个文件打开之后 然后执行完就必须在循环中关闭, 否则就会出现进程冲突
}
ZipName = DateTime.Now.ToString("yyyyMMdd");
Logger.Log.Debug(ZipName);
}
}
catch (Exception ex)
{
Logger.Log.Error("ZIP打包错误" + ex);
throw (ex);
} zos.Close(); HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(ZipName + ".zip", System.Text.Encoding.UTF8));
HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
使用微软自带 SharpZipLib 进行多文件 压缩的更多相关文章
- 利用ICSharpCode.SharpZipLib.Zip进行文件压缩
官网http://www.icsharpcode.net/ 支持文件和字符压缩. 创建全新的压缩包 第一步,创建压缩包 using ICSharpCode.SharpZipLib.Zip; ZipOu ...
- 利用c#自带的类对文件进行压缩和解压处理
在做网络传输文件的小例子的时候,当传输的文件比较大的时候,我们通常都是将文件经过压缩之后才进行传输,以前都是利用第三方插件来对文件进行压缩的,但是现在我发现了c#自带的类库也能够实现文件的压缩,实际上 ...
- C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法
原文:C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法 本人新手,在.Net中写WebAPI的时候,当接口返回的json数据含有日期时间类型的字段时, ...
- C#文件压缩:ICSharpCode.SharpZipLib生成zip、tar、tar.gz
原文地址:https://blog.csdn.net/nihao198503/article/details/9204115 将代码原封不动的copy过来,只是因为有关tar的文章太少,大多都是zip ...
- 2019-8-31-dotnet-core-发布只带必要的依赖文件
title author date CreateTime categories dotnet core 发布只带必要的依赖文件 lindexi 2019-08-31 16:55:58 +0800 20 ...
- MySQL如何导出带日期格式的文件
一网友问在MySQL中如何只用SQL语句导出带日期格式的文件.觉得有点意思,于是尝试了一下.导出文件使用SELECT INTO OUTFILE 但是OUTFILE后面的值不能使用变量,所以只能使用动态 ...
- PHP自带Session隐患(session文件独占锁引起阻塞)
PHP自带Session隐患(session文件独占锁引起阻塞) PHP默认的会话处理器是session.save_handler = files(即文件).如果同一个客户端同时并发发送多个请求(如a ...
- 微软自带的Serialization和Newtonsoft简单测试
刚刚对这两个进行了一下小小的测试 发现 当转换的内容少的时候 微软自带的比Newtonsoft速度要快一些,内容多的时候反之,当内容多到一定量的时候微软自带的就不能转换了,需要修改一下MaxJson ...
- piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql
piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql 需要不个mssql的sql文件导入mysql.他们的时间戳格式不同..ms用的是自定义的时 ...
随机推荐
- 记录C#常用的代码片段
时间一久,常用的代码会有点忘记,还是贴在这里方便查找! 1.将信息写入文件中 //将字符串写入到文本中 void writeToText(string msg) { try { msg = DateT ...
- tensorflow会话控制-【老鱼学tensorflow】
在tensorflow中,当定义好结构后,就要通过tf.session()来建立运行时的会话. 本例子应该不难理解,我们用tensorflow来计算一下一个1行2列的矩阵和2行1列矩阵的乘积: imp ...
- POJ 2391 Ombrophobic Bovines (二分答案+floyd+最大流)
<题目链接> 题目大意: 给定一个有$n$个顶点和$m$条边的无向图,点$i$ 处有$A_i$头牛,点$i$ 处的牛棚能容纳$B_i$头牛,每条边有一个时间花费$t_i$(表示从一个端点走 ...
- Problem J. Journey with Pigs
Problem J. Journey with Pigshttp://codeforces.com/gym/241680/problem/J考察排序不等式算出来单位重量在每个村庄的收益,然后生序排列猪 ...
- jmeter之JDBC Request各种数据库配置
URL和JDBC驱动: Datebase Driver class Database URL MySQL com.mysql.jdbc.Driver jdbc:mysql://host:port/{d ...
- (转)RBAC权限管理
RBAC 模型作为目前最为广泛接受的权限模型 角色访问控制(RBAC)引入了Role的概念,目的是为了隔离User(即动作主体,Subject)与Privilege(权限,表示对Resource的一个 ...
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof
A. City Wall 找规律. #include<stdio.h> #include<iostream> #include<string.h> #include ...
- [BZOJ1984][Luogu4315]月下“毛景树”
题目大意 给出一棵 n 个点的无根树,待边权,要求维护一下操作: 修改某条边的边权 修改点 u 到点 v 路径上所有边的边权 点 u 到点 v 路径上所有边的边权加上某个值 查询点 u 到点 v 路径 ...
- GitHub的实现是否是基于此语言的支持网络编程性呢?
我觉好像是的,我之前很奇怪为什么那样就可以引用了,后来发现GitHub中的java JavaScript phton等语言都支持网络编程.
- jq冲刺
1.入口函数$(document).ready(function(){ })简便写法:$(()=>{ }) js的入口函数window.onload()区别js的入口函数要比jq的要晚很多,wi ...