SharpCompress压缩和解压缩,并解决压缩的中文乱码问题
一.下载SharpCompress库

二.解压缩
(1)不带密码
/// <summary>
/// 解压缩(支持rar,zip)
/// </summary>
/// <param name="fromFilePath">待解压文件全路径</param>
/// <param name="outFileDirectory">解压文件后目录</param>
public static void Decompress(string fromFilePath, string outFileDirectory)
{
var archive = ArchiveFactory.Open(fromFilePath);
foreach (var entry in archive.Entries)
{
if (!entry.IsDirectory)
{
//Debug.WriteLine(entry.Key);
entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
}
}
}
(2)带密码
/// <summary>
/// 解压缩加密的包(支持rar,zip)
/// </summary>
/// <param name="fromFilePath">待解压文件全路径</param>
/// <param name="outFileDirectory">解压文件后目录</param>
/// <param name="password">密码</param>
public static void DecompressWithPwd(string fromFilePath, string outFileDirectory, string password)
{
using (var archive = ArchiveFactory.Open(fromFilePath, new ReaderOptions { Password = password }))
{
foreach (var entry in archive.Entries)
{
if (!entry.IsDirectory)
{
//Debug.WriteLine(entry.Key);
entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
}
}
}
}
三.压缩
/// <summary>
/// 压缩(zip格式)
/// </summary>
/// <param name="fromFileDirectory">待压缩目录</param>
/// <param name="outFilePath">压缩后文全件路径</param>
public static void ZipCompress(string fromFileDirectory, string outFilePath)
{
//解决中文乱码问题
SharpCompress.Common.ArchiveEncoding ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding();
ArchiveEncoding.Default = Encoding.GetEncoding("utf-8");
SharpCompress.Writers.WriterOptions options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate);
options.ArchiveEncoding = ArchiveEncoding; using (var archive = ZipArchive.Create())
{
archive.AddAllFromDirectory(fromFileDirectory);
using (var zip = File.OpenWrite(outFilePath))
archive.SaveTo(zip, options);
}
}
四.调用
//压缩
string fromFileDirectory = @"C:\test\我是目录";
string outFilePath = @"C:\压缩包1.zip";
CompressHelper.ZipCompress(fromFileDirectory, outFilePath); //解压缩
string fromFilePath = @"C:\压缩包1.zip";
string outFileDirectory = @"C:\解压目录\压缩包1";
CompressHelper.Decompress(fromFilePath, outFileDirectory);
五.中文乱码问题
老版本直接加入下面一行代码就可以了
SharpCompress.Common.ArchiveEncoding.Default = Encoding.GetEncoding ("utf-8");
但是我使用的是0.23.0版本,.ArchiveEncoding已经从静态类改为普通类了,无法这样调用
参考:https://github.com/adamhathcock/sharpcompress/issues/268

最后发现:ArchiveEncoding类是OptionsBase的属性,而OptionsBase是WriterOptions的基类,ZipArchive的SaveTo方法带WriterOptions参数,那就ok了
参考:
wiki:https://github.com/adamhathcock/sharpcompress/wiki/API-Examples
支持类型:https://github.com/adamhathcock/sharpcompress/wiki/Supported-Formats
SharpCompress压缩和解压缩,并解决压缩的中文乱码问题的更多相关文章
- JAVA压缩 解压缩zip 并解决linux下中文乱码
1. [代码][Java]代码 1:再压缩前,要设置linux模式, 需要使用第三方ant-1.6.5.jar 如果是文件目录,则ZipEntry zipEntry=new ZipEntry(b ...
- 教你解决Sublime Text中文乱码问题
教你解决Sublime Text中文乱码问题[转载自成长的企鹅] Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. ...
- 分享一个解决MySQL写入中文乱码的方法
分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...
- 完美解决Informix的中文乱码问题
完美解决Informix的中文乱码问题 Informix是IBM旗下的一款数据库,要不是这个项目需要,估计这辈子我都不知道居然还有这么一款数据库.想来公司的项目遍布全国各地,各种部署环境各种应用场景 ...
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ...
- 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录
解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区 作者:njchenyi [字体:大 中 小] 我是先安装了Ubuntu 12.04 Server,然后 ...
- gedit 没有preference项,使preference回归,并用命令行设置行号,解决centos7下中文乱码,text wrapping等问题
1. 最简单的,使preference选项回来: gsettings set org.gnome.settings-daemon.plugins.xsettings overrides '@a{sv} ...
- 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢
目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...
- 解决phantomjs输出中文乱码
解决phantomjs输出中文乱码,可以在js文件里添加如下语句: phantom.outputEncoding="gb2312"; // 解决输出乱码
- zabbix解决监控图形中文乱码
原文: https://blog.csdn.net/xujiamin0022016/article/details/86541783 zabbix 4解决监控图形中文乱码首先在windows里找到你想 ...
随机推荐
- HTML(超文本标记语言)
学习地址:https://developer.mozilla.org/zh-CN/docs/Web/Html
- linux下mysql配置文件my.cnf最详细解释
MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于/etc/my.cnf. 可以查找下:find / -name my.cnf m ...
- 西安电子科技大学第16届程序设计竞赛 E Xieldy And His Password
链接:https://www.nowcoder.com/acm/contest/107/E来源:牛客网 Xieldy And His Password 时间限制:C/C++ 1秒,其他语言2秒 空间限 ...
- leetcode Single Number II - 位运算处理数组中的数
题目描述: 给定一个包含n个整数的数组,除了一个数出现一次外所有的整数均出现三次,找出这个只出现一次的整数. 题目来源: http://oj.leetcode.com/problems/single- ...
- 10-13C#语句(1)
C#语句:判断.循环.形成程序的分支和循环 1.语句分类 1)顺序语句 2)分支语句 3)循环语句 2.语句 选择控制:if,else,switch,case 循环控制:while,do,for,fo ...
- C语言学习笔记--递归函数
1. 递归函数的思想 (1)递归是一种数学上分而自治的思想,是将大型复杂问题转化为与原问题相同但规模较小的问题进行处理的一种方法 (2)递归需要有边界条件 ①当边界条件不满足时,递归继续进行 ②当边界 ...
- 如何实现1080P延迟低于500ms的实时超清直播传输技术<转>
转载地址:http://www.yunweipai.com/archives/9037.html 最近由于公司业务关系,需要一个在公网上能实时互动超清视频的架构和技术方案.众所周知,视频直播用 CDN ...
- DAY11-MYSQL视图、触发器、事务、存储过程、函数
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- 使用Ping命令解析主机名解析出来的是IPv6
如果你经常使用ping命令,并身处局域网,那么你肯定会有这样一个疑问:Ping计算机名为何是IPv6地址? 问这个问题的人很少见,大多都是对网络知识稍有了解的人,所以才会闻到关于ping的问题,而且在 ...
- 【总结整理】json数据请求简化版理解(祺哥的成果)
在同源js目录下新建.txt文件 { "news":[ {"title":"审计管理","time":"201 ...