关于DotNetZip的用法

简介: 关于DotNetZip的用法

公司有个项目要求解压缩操作,一直在使用WinRar和Gzip一个有版权问题,一个效率存在问题,因此决定找一个开源高效的第三方插件。这个时候DotNetZip映入眼帘,他不仅仅能压缩,还能分卷压缩,对中文的至此也是很好。但这些都是在网络上查找时大家说的,基本没见代码如何写,DotNetZip本身使用简单,DLL也不是很大,所以我就使用到项目内。但在使用的过程中发现分卷压缩到底如何实现?解压中文依旧有问题?找了很多资料居然没这个方面的东西,没办法只好去官方查找资料。官方地址:http://dotnetzip.codeplex.com/

在官方看到一些信息不过没看到关于分卷压缩的内容,只好一点一点看属性,个人感觉分卷压缩就是给他一个分卷值,之后在设定一个属性告诉他要分卷压缩即可,黄天不负有心人我找到分卷压缩的属性了。MaxOutputSegmentSize这个属性就是分卷压缩值,设置他的大小即可,他的单位是Kb。

解压的时候对中文至此不是很好,找了好久也不知道如何解决,后来在坛子里发帖,也没得到很好的解答,官方的示例代码是这样写道


using (ZipFile zip = new ZipFile())
{
  zip.Encoding = System.Text.Encoding.GetEncoding("big5"); // chinese
  zip.AddDirectory(@"MyDocuments\ProjectX");
  zip.Save(ZipFileToCreate);
}


可这个Encoding属性在1.9.1.8这个版本已经不存在了,所以针对中文乱码的问题依旧。找了好多文章看也没有这个版本如何解决的,最主要的是这个DLL的资料比较少。后来实在没有办法就去看看了源代码,终于找到了他的最新写法,好了废话不多说了直接看如何支持分卷压缩和中文不乱那么的代码吧,算是给自己提醒也是和大家分享下。

public static bool ZipFolder(
            String sourceFilePath,
            String targetFileFullPath,
            Boolean isUsePassword,
            Int32 maxOutputSegmentSiez,
            out String errMessage)
        {
            try
            {
                using (ZipFile zip = new ZipFile(Encoding.Default))
                {
                    errMessage = String.Empty;
                    zip.Comment = "压缩文件时间" + System.DateTime.Now.ToString("G");
                    zip.Name = Guid.NewGuid().ToString().ToUpper() + ".zip";
                    if (isUsePassword)
                        zip.Password = D7.Base.ConstParameter.ZipPassWord;
                    zip.MaxOutputSegmentSize = maxOutputSegmentSiez * 1000;
                    zip.BufferSize = 1024;
                    zip.CaseSensitiveRetrieval = true;
                    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                    zip.AddDirectory(sourceFilePath);
                    zip.Save(targetFileFullPath);
                    return true;
                }
            }
            catch (Exception ex) { errMessage = ex.Message; return false; }
        }
public static bool ExtractFile(String sourceFileFullPath,
            String targetFilePath,
            out String errMessage)
        {
            return ExtractFile(sourceFileFullPath, targetFilePath, true, out errMessage);
        }
        public static bool ExtractFile(String sourceFileFullPath,
            String targetFilePath,
            Boolean isUsePassword,
            out String errMessage)
        {
            try
            {                
                Encoding encoding = Utils.GetEncodingType(sourceFileFullPath);
                errMessage = String.Empty;
                var options = new ReadOptions { StatusMessageWriter = System.Console.Out, Encoding = encoding };
                using (ZipFile zip = ZipFile.Read(sourceFileFullPath, options))
                {
                    if (isUsePassword)
                        zip.Password = D7.Base.ConstParameter.ZipPassWord;                    
                    zip.AlternateEncoding = encoding;                    
                    zip.ExtractAll(targetFilePath, ExtractExistingFileAction.OverwriteSilently);
                    return true;
                }
            }
            catch (Exception ex) { errMessage = ex.Message; return false; }
        }

这2个方法就是引用了Ionic.Zip.dll 1.9.1.8版本写的,DLL下载地址是http://dotnetzip.codeplex.com/releases/view/68268

好了,解压和压缩都有了,可以分卷,可以加密码,支持中文。代码红色区域是如何支持中文的,其中Encoding encoding = Utils.GetEncodingType(sourceFileFullPath);

使用了一个小方法获取文件的内部编码,之后在赋值给DotNetZip即可,代码网上有很多不贴了。

目录
相关文章
|
算法 测试技术 数据处理
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
327 1
|
4月前
|
人工智能 自然语言处理 监控
生成式AI客服实战:智能客服机器人5大自动化能力处理80%高频咨询,释放60%客服人力
生成式AI驱动的智能客服机器人通过五大核心能力自动化处理80%高频咨询,释放60%客服人力。以合力亿捷方案为例,融合大模型与业务知识图谱,实现服务精准化、决策智能化,推动企业服务成本下降超40%。
477 0
|
6月前
|
NoSQL 调度 Redis
分布式锁—5.Redisson的读写锁
Redisson读写锁(RedissonReadWriteLock)是Redisson提供的一种分布式锁机制,支持读锁和写锁的互斥与并发控制。读锁允许多个线程同时获取,适用于读多写少的场景,而写锁则是独占锁,确保写操作的互斥性。Redisson通过Lua脚本实现锁的获取、释放和重入逻辑,并利用WatchDog机制自动续期锁的过期时间,防止锁因超时被误释放。 读锁的获取逻辑通过Lua脚本实现,支持读读不互斥,即多个线程可以同时获取读锁。写锁的获取逻辑则确保写写互斥和读写互斥,即同一时间只能有一个线程获取写锁,
366 17
|
NoSQL 前端开发 MongoDB
[保姆级教程]Windows安装MongoDB教程
【6月更文挑战第4天】该内容是关于MongoDB的安装包下载及安装步骤指南。首先,访问网址 <a href="https://www.mongodb.com/try" target="_blank">https://www.mongodb.com/try</a> 进入官网,选择MongoDB Community Edition(社区版)。接着,挑选合适的版本和系统平台,推荐下载zip压缩包。下载后,进行安装,依次点击“Next”同意协议,选择自定义安装路径,然后继续安装直至完成。
1550 0
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
456 2
|
关系型数据库 MySQL Java
Linux 安装 JDK、MySQL、Tomcat(图文并茂)
Linux 安装 JDK、MySQL、Tomcat(图文并茂)
1580 2
|
XML Java 数据格式
|
存储 数据采集 监控
从存储统一到数据融合,SLS在可观测场景的思考和行动
介绍SLS在可观测数据融合分析的一系列技术升级,融合Trace、全栈监控、Continuous Profiling、移动端监控等功能,帮助大家更快速地构筑全栈、自动化的观测能力。
128511 52
|
缓存 监控 小程序
微信小程序全栈开发中的性能监控与调优
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的性能监控与调优。页面加载速度、响应速度、内存占用和电量消耗是关键性能问题。开发者可利用微信小程序开发者工具进行性能监控,分析指标并优化代码、数据缓存、资源管理。通过综合性能调优,提升小程序性能和用户体验,降低用户流失。开发者需持续关注和学习新性能优化技术。
507 2
|
SQL HIVE 索引
【Hive SQL 每日一题】行列转换
该文介绍了如何使用SQL进行数据的行列转换。首先展示了行转列的例子,通过创建一个学生成绩表,利用`IF`和`SUM`函数按学生ID分组,将每个学生的各科成绩转换为独立列。然后,文章讲述了列转行的需求,利用`LATERAL VIEW`和`POSEXPLODE`将已转换的表格恢复为原始行格式,通过索引匹配过滤笛卡尔积避免错误结果。此外,还提到了使用`UNION ALL`的另一种列转行方法。
698 1