其实园子压缩解压缩的方法很多,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

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

  1. Word中添加压缩包,word中添加文件

    Word中添加压缩包,word中添加文件 方式1_创建对象 目录结构 在word中创建对象 选择对象类型 4. 创建对象 5. 浏览选择文件 6. 下一步 7. 完成 8. 创建完成 可以看到文件已经 ...

  2. 怎么用html实现QQ代挂功能,如何给自己的代挂网、代刷网、底部添加腾讯云智服客服代码...

    腾讯云智服是什么∶ 腾讯云智服是腾讯官方推出的一款专业云客服SaaS系统,助理企业打造一流的服务体验.提供人工客服工作台(pc和移动端).智能机器人.工单系统.CRM客户管理系统.数据报表等功能. 接 ...

  3. bgm背景音乐计算机,背景音乐添加器

    背景音乐添加器官方版是一款为音视频资料添加背景音乐的专用工具,为您制作的多媒体广告.语音小说等增加背景音乐,支持mp4/mp3/wav/flv/avi/rm等多种格式. 背景音乐添加器软件简介 其他号 ...

  4. 加密ZIP压缩包、解密ZIP压缩包密码

    压缩包文件大家都经常使用,经常用来压缩文件之后再转发给别人,网上下载的软件,有时候也是压缩包形式下载下来,解压之后才是软件.相信大家一定也遇到过加密的压缩包文件.今天和大家分享如何加密压缩包,以及如何 ...

  5. BetterZip使用教程——快速导入压缩包的小技巧

    BetterZip作为Mac常用的压缩文件的软件,具有快捷.安全的特点.今天小编为大家演示BetterZip如何快速导入压缩包. 首先打开BetterZip,找到要解压的压缩包位置.下面介绍几种快速导 ...

  6. BetterZip使用教程——快速导入压缩包

    方法一:快速拖拽式 首先找到压缩包的位置,这种方法尽量保证BetterZip软件于压缩包在同一可视界面,这样更方便拖拽.只要将压缩包如下图所示方法直接拖拽到BetterZip主界面中,就可以快速完成啦 ...

  7. Java 库文件的添加教程

    Java 库文件的添加教程 准备步骤和注意事项 导入到 IntelliJ IDEA 中 导入到 Eclipse 中 设置类路径 准备步骤和注意事项 前提是已经有了需要添加的库文件,一般是 .jar 文 ...

  8. ios13苹方字体ttf_字体 | iOS1013 SF Compact Rounded 英文 By alex

    最近沉迷游戏,差点忘记了这个英文.嗨呀,问就是在玩了,啊不,在做了. 这个英文来自推特alexman,原版包含100和85大小,本次分享新增到了100-60,每5%一个大小. gzh分享已经获得ale ...

  9. cad汉仪长仿宋体_汉仪长仿宋体下载

    汉仪长仿宋体字体是一款由汉仪字库开发的一款中文字体,这款字体笔触较为纤细,字体清晰,字形潇洒,适合应用于艺术设计,平面宣传设计,网页设计,书法字帖等领域,需要的朋友可以前来本站下载. 注意事项:本站所 ...

最新文章

  1. 配置phpmyadmin连接远程 MySQL数据库
  2. Word插入Latex公式的几种方式~(TeXsWord、EqualX、Aurora、向Office插入LaTeX公式的工具)
  3. 设计模式之SOLID原则再回首
  4. c++中判断某个值在字典的value中_Python核心知识系列:字典
  5. 基于PageRank的作弊检测算法
  6. 手机QQ浏览器如何同时下载多个文件
  7. 封装mysql数据库操作系统_封装MySQL的单例,连接数据库并对数据进行增删改查操作...
  8. 自定义的BaseAdapter实现LIstView的展示
  9. django mysql secure_auth_MySQL8.0的用户密码加密方式Django2.1兼容。
  10. matlab 二维低通滤波器,matlab二维低通滤波器
  11. Windows系统清理随记
  12. 2022-2027年中国玩偶行业市场全景评估及发展战略规划报告
  13. 分享逻辑思维导图模板,需要的自取进行编辑使用
  14. Android朋友圈怎么换行,2020年发朋友圈打字怎么换行
  15. 电话测试压力软件,1-60T简单压力测试仪器/简单的测试压力工具
  16. 【东周列国志】读后感
  17. Java中的逻辑运算符/移位运算符简单总结
  18. lambada表达式介绍
  19. 最详细JMX远程连接服务器Zookeeper失败问题踩坑和总结
  20. 解决linux 2.5G网卡驱动问题

热门文章

  1. 复习Java_List_Set_HashSet原理_Collections使用_Comparator使用
  2. Python 代理类实现和控制访问与修改属性的权限
  3. ub c语言,操作系统之LRU算法 C语言链表实现
  4. LeetCode LCP 29. 乐团站位(数学 等差数列)
  5. 流畅的Python 1. Python数据模型(特殊方法 __func__())
  6. LeetCode 1691. 堆叠长方体的最大高度(排序+最大上升子序DP)
  7. 天池 在线编程 有效的字符串
  8. 阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end
  9. LeetCode 366. 寻找二叉树的叶子节点(上下翻转二叉树+BFS)
  10. LeetCode 388. 文件的最长绝对路径(不用栈,前缀和)