关于ZipOupputStream添加压缩包常见问题

 

其实园子压缩解压缩的方法很多,ZipOupputStream这个类的说明很多,我这边也是从网上找的代码,但是我在压缩的时候遇到了常见的两个问题,第一个就是压缩的时候读取压缩包报该压缩包已经在另一个进程打开的bug,这个问题解决方法是不能把创建的压缩包和被压缩的文件放在同一目录下,因为当前目录已经被打开了。

第二个问题压缩文件夹无法把多个文件压缩,遍历无法压缩多个文件,原因是ZipOutputStream这个类库中的CRC32这个类,本人表示查来查去也没找个那个大神的园子里解释过这个类,总之把与这个类相关的代码注释掉就可以多个文件压缩了,希望有懂得大神可以给解释下。

public class ZipFloClass
{
public void ZipFile(string strFile, string strZip)
{
if(File.Exists(strZip))
{
File.Delete(strZip);
}
if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
strFile += Path.DirectorySeparatorChar;
FileStream fs = new FileStream(strZip, FileMode.Create);
ZipOutputStream s = new ZipOutputStream(fs);
s.SetLevel(6); // 0 - store only to 9 - means best compression
zip(strFile, s, strFile);
s.Finish();
s.Close();

}

private void zip(string strFile, ZipOutputStream s, string staticFile)
{
if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar;
Crc32 crc = new Crc32();
string[] filenames = Directory.GetFileSystemEntries(strFile);
foreach (string file in filenames)
{

if (Directory.Exists(file))
{
zip(file, s, staticFile);
}

else // 否则直接压缩文件
{
//打开压缩文件
FileStream fs = File.OpenRead(file);

byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
ZipEntry entry = new ZipEntry(tempfile);

entry.DateTime = DateTime.Now;
entry.Size = fs.Length;
fs.Close();
//crc.Reset();
//crc.Update(buffer);
//entry.Crc = crc.Value;
s.PutNextEntry(entry);
s.Write(buffer, 0, buffer.Length);

}
}
}

}

转载于:https://www.cnblogs.com/renzhitian/p/7903119.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边缘AI芯片市场将在2025年首次反超云端AI芯片市场

边缘AI将利用许多其他新兴技术,为消费者和企业领域的各种新商机铺平道路。来源:雷锋网作者:吴优由于市场对低延迟、数据隐私以及低成本和超节能的可用性的日益关注,预计到2025年,边缘AI芯片组市场将首次超过云AI芯片组…

性能指标分析

文章:架构必会的性能指标及分析策略转载于:https://www.cnblogs.com/Tpf386/p/7904174.html

倪光南:看好鸿蒙系统,坚持生态体系创新才能不被“卡脖子”

图为倪光南院士接受专访来源:澎湃新闻8月7日,在中国信息化百人会2020年峰会上,华为消费者业务CEO余承东关于“麒麟芯片将绝版”的消息一石激起千层浪,在新的国际环境下,国内科技企业应当如何突破重围,自主创…

弦理论三先驱获2020年狄拉克奖

狄拉克奖是国际理论物理中心(International Centre for Theoretical Physics,ICTP)为纪念理论物理学家狄拉克而在1985年设置的奖项,被视为理论和数学物理领域的最高荣誉之一。近日,ICTP 在意大利 Trieste 宣布了2020年…

windows c++ 内存映射大文件问题记录

MapViewOfFile()使用时总是报错1132,是因为起始位置大小要是64k的倍数。 例如:LPVOID pFileBlock MapViewOfFile(OpenMap , FILE_MAP_ALL_ACCESS // 注意,和createfile要一致 , 0 , dBegin …

CCAI 2020 | 黄铁军:“仿真主义”下的人工智能发展之路

来源:中国人工智能学会在人工智能发展的60多年中,大致有四种方法来实现某些人工智能:符号主义,联结主义,行为主义和统计学,它们分别从不同的角度抓住了“智能”的一些特点,因此各自引领着一个时…

对new int[]()的理解(转载)

new(多个对象)数组 new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。 int *p1 new int[10]; // 10个未初始化int int *p2 new int[10](); // …

事件(二):事件处理程序

click,load,mouseover都是事件的名字,而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以on开头,onclick,onload 事件处理程序(html事件处理程序,dom0级事件处理程序&#xff0c…

物联网激荡MEMS传感器浪潮

来源:第三代半导体联合创新孵化中心物联网悄然而至。如今,物联网已进入跨界融合、集成创新和规模化发展新阶段,将为经济社会发展注入新活力,培育新动能。物联网在交通、物流、环保、医疗、安防、电力等领域的应用逐渐得到规模化验…

如何判断是linux/windows库,module或程序debug还是release(转)

linux: readelf -S xxx.a |grep "\.debug*" 如果有输出, 是debug, 没有是release windows: dumpbin /DEPENDENTS xx.dll, 结果输出中有MSVCRTD.dll的是debug版本. 为了脚本自动判断, 可用powergrep等工具自动分拣. .lib和我们的编译选项有…

发布功能完成。

编写要求登录的装饰器from functools import wraps def loginFirst(func): #参数是函数 wraps(func) def wrapper(*args, ** kwargs): #定义个函数将其返回 #要求登录 return func(*args, ** kwargs) return wrapper #返回一个函数 应用装饰器,要求在发布前进行登录…

git clone报错

问题:error: RPC failed; curl 18 transfer closed with outstanding read data remaining 方法:(一般http方式会用到) $ git clone 仓库地址 --depth 1 $ cd 项目目录 $ git fetch --unshallow 附带:指定分支命令 …

《自然》《科学》相继发文批评质疑:俄罗斯注册新冠疫苗“让众人面临风险”...

来源:环球科学编译丨杨心舟8月11日,俄罗斯总统普京在与政府成员举行会议时透露,俄罗斯已经注册世界第一种新冠肺炎疫苗。普京表示,这款疫苗非常有效,能够形成稳定的免疫力并且已通过所有的检查,并且自己的女…

翻译连载 | 附录 A:Transducing(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇...

原文地址:Functional-Light-JS原文作者:Kyle Simpson-《You-Dont-Know-JS》作者关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱;分享,是 CSS 里最闪耀的一瞥…

python 去除不可见字符\x00

读取出来的字节:testa b‘testa\x00’ 去掉\x00:testa.decode().strip(b\x00.decode()) 经测试多个\x00也可以去掉

思未尽,行致远丨记 IBM 成立 109周年

来源:IBM中国主创团队(IBM Social & Studio DL team)策划:点亮 IBM 庆生蜡烛的甜心御姐 June撰稿:被百年“名场面”感动 cry 的原创一哥 Raphal设计:熬出黑眼圈也要操刀设计的鲁先森排版:话…

RAC(ReactiveCocoa)使用方法(二)

RAC(ReactiveCocoa)使用方法(一)RAC(ReactiveCocoa)使用方法(二) 上篇文章:RAC(ReactiveCocoa)使用方法(一) 中主要介绍了一些RAC中常见类的用法,这篇文章主要总结日常开发中结合一些UI控件的用法。 RAC给常见的很多UI类拓展了用法,使得开发变得越来越简…

unordered_map使用自定义enum作为键值

首先定义模板作为unordered_map的第三个参数&#xff1a; struct EnumClassHash {template <typename T>std::size_t operator()(T t) const{return static_cast<std::size_t>(t);} }; 使用&#xff1a; enum class MyEnum {};std::unordered_map<MyEnum, i…

王恩哥院士:信息化发展进程中,科学、基础研究和技术、应用都是关键

图为王恩哥院士接受新华网采访来源&#xff1a;新华网由深圳市人民政府指导&#xff0c;中国信息化百人会主办&#xff0c;华为技术有限公司协办的中国信息化百人会2020年峰会于8月7日启幕。会上&#xff0c;中国信息化百人会顾问、中国科学院院士、北京大学原校长、中国科学院…

数据传址赋值问题

例如&#xff1a; int a 0&#xff1b; void test (&a) { for (int i 0; i < 10; I) { *a; } } 并不能拿到想要的值&#xff0c;反而可能都是随机值&#xff0c;最好使用*a 1。因为*a是先a后*取值&#xff0c;导致指针位置变化&#xff0c;值并没有变。