一.下载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压缩和解压缩,并解决压缩的中文乱码问题的更多相关文章

  1. JAVA压缩 解压缩zip 并解决linux下中文乱码

    1. [代码][Java]代码   1:再压缩前,要设置linux模式, 需要使用第三方ant-1.6.5.jar  如果是文件目录,则ZipEntry zipEntry=new ZipEntry(b ...

  2. 教你解决Sublime Text中文乱码问题

    教你解决Sublime Text中文乱码问题[转载自成长的企鹅]       Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. ...

  3. 分享一个解决MySQL写入中文乱码的方法

    分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...

  4. 完美解决Informix的中文乱码问题

    完美解决Informix的中文乱码问题  Informix是IBM旗下的一款数据库,要不是这个项目需要,估计这辈子我都不知道居然还有这么一款数据库.想来公司的项目遍布全国各地,各种部署环境各种应用场景 ...

  5. 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

    前述:      在写这篇笔记之前,对笔记中的设计模式进行介绍:      本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式           (1)装饰(包装)设计模式口诀:         ...

  6. 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录

    解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区  作者:njchenyi [字体:大 中 小]   我是先安装了Ubuntu 12.04 Server,然后 ...

  7. gedit 没有preference项,使preference回归,并用命令行设置行号,解决centos7下中文乱码,text wrapping等问题

    1. 最简单的,使preference选项回来: gsettings set org.gnome.settings-daemon.plugins.xsettings overrides '@a{sv} ...

  8. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  9. 解决phantomjs输出中文乱码

    解决phantomjs输出中文乱码,可以在js文件里添加如下语句: phantom.outputEncoding="gb2312"; // 解决输出乱码

  10. zabbix解决监控图形中文乱码

    原文: https://blog.csdn.net/xujiamin0022016/article/details/86541783 zabbix 4解决监控图形中文乱码首先在windows里找到你想 ...

随机推荐

  1. 洛谷【P1439】【模板】最长公共上升子序列

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  2. 我的ubuntu新系统自动装软件脚本

    装一些常用软件 配一下环境变量 #!/bin/bash #download g++sudo apt-get install g++ -y#download codeblockssudo apt-get ...

  3. POJ3264(RMQ-ST算法)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 47087   Accepted: 22101 ...

  4. java代码----方法类练习中~~~未领会

    总结:今天我很失败,问了老师继承的问题还是没弄懂.因为,技术宅的能力,我好怕啊.太强了. package com.da.ima2; public class yut {// 使用substring方法 ...

  5. 无人零售的黑科技:RFID技术

    无人零售的黑科技:RFID技术说起最近的热门话题,“无人零售商店”当属其一.自去年底,亚马逊推出第一家无人实体超市Amazon Go,到阿里.京东.大润发等各大企业纷纷加入,无人商店被推上了风口浪尖. ...

  6. hadoop block大小为128的原因

    1.减轻了namenode的压力 原因是hadoop集群在启动的时候,datanode会上报自己的block的信息给namenode.namenode把这些信息放到内存中.那么如果块变大了,那么nam ...

  7. 【转载】eclipse如何传递main参数

    转自:http://blog.csdn.net/theblackbeard/article/details/52172048 在命令行窗口可以通过java +程序名 +参数1(空格)参数2(空格).. ...

  8. [Python Study Notes]饼状图绘制

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. CentOS 6.3安装jdk(笔记整理)

    1. 下载bin文件,切忌oracle上现在下载到的旧版本的jdk的bin都是网页(执行会报错,见本文最后的截图),他们需要登录oracle后才能下载,所以我这里的url是从googlecode里觅来 ...

  10. 201671010127 2016—2017-2 java学习新征程

    通过大一整个学年对Python和C语言的学习,我对编程的感受有了更进一步的认识.随着时代的进步,编程语言也在实时更新,面对越来越多的编程语言,对于在编程方面的初学者,选择一门适合自己的编程语言就显得十 ...