(一)为什么选择7z

             7z 是一种主流高效的压缩格式,它拥有极高的压缩比。在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式。该格式最初被7-Zip实现并采用,但是这种档案格式是公有的,并且7-Zip软件本身亦在GNU宽通用公共许可证 (GNU LGPL)协议下       开放源代码。目前LZMA软件开发工具包的最新版本为V9.34。7z格式的MIME类型为application/x-7z-compressed。
            通常使用 7-Zip 的 7z 格式能比使用 zip 格式的压缩文件小 30-70%。
            并且使用 7-Zip 创建的 zip 格式比大多数其它压缩软件创建的都小 2-10%。

(二) SevenZipSharp初始化工作

1、首先通过nuget获取 SevenZipSharp;

2、由于SevenZipSharp  是依赖于7z.dll的,所以你要单独添加7z.Dll放到你项目文件下的Bin目录,放这个的时候,要注意下系统是要用32位,还是64的呢?如果弄错会报这个错误”an not load 7-zip library or internal COM error! Message: DLL file does not exist“

3、如果你不按照第二步那种做法,你想自己指定7z.dll的位置。你可以这么做

   var path = "~/App_Data/7z/7z.dll";
SevenZipBase.SetLibraryPath(path);

然后可能有些同学不太明白我说什么,先来这里把7z.dll下载下来再说吧。https://github.com/gdoujkzz/7zdll.git

(三) 使用SevenZipSharp 进行压缩

普通压缩(不加密压缩)

                var tmp = new SevenZipCompressor(); //7z压缩
tmp.ScanOnlyWritable = true; //只可写
//tmp.CompressFiles()这个有三个重载,这里只讲其中一个比较常用的。
//public void CompressFiles(string archiveName, params string[] fileFullNames)
//archiveName:这个是代表生成的7z文件存在哪里
//fileFullNames:这个参数是要压缩的文件是一个params数组,特别注意必须是完整的路径名才有效
tmp.CompressFiles(@"D:\max\arch.7z", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test.txt", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test1.txt"); //tmp.CompressDirectory 压缩指定路径下面的所有文件,这个有12个重载,也只讲其中一个简单的。
// public void CompressDirectory( string directory, string archiveName)
tmp.CompressDirectory(@"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug", @"arch.7z");

加密压缩

其实也是和刚刚一样,看代码。

   var tmp = new SevenZipCompressor();
tmp.CompressFilesEncrypted(@"D:\max\jiami.7z", "", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test1.txt", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test.txt")

压缩文件要加密,我暂时看到是只有这一种方式,如果大家有其他建议或不同,欢迎交流,谢谢。

(四) 使用SevenZipSharp 进行解压

普通解压

    using (var tmp = new SevenZipExtractor(@"d:\max\noEncrypted.7z")) { //7z文件路径
for (int i = ; i < tmp.ArchiveFileData.Count; i++) {
tmp.ExtractFiles(@"d:\max\", tmp.ArchiveFileData[i].Index); //解压文件路径
}
}
//同样他也是支持界面某个路径下面的7z包的
//temp.ExtractArchive(path);

加密文件解压

      using (var tmp = new SevenZipExtractor(@"d:\max\jiami2.7z","")) { //7z文件路径和7z文件密码
for (int i = ; i < tmp.ArchiveFileData.Count; i++) {
tmp.ExtractFiles(@"d:\max\test\", tmp.ArchiveFileData[i].Index); //解压文件路径 }
}

(五)其他功能

除了上面所说的一些基本功能之外, 还有下面这些功能。

(1)SevenZipSharp支持跨平台,可以在Mono上面使用。

(2)SevenZIpSharp还支持进行异步的压缩和解压。

(3)还支持多卷压缩和解压

(4)还支持...还有很多厉害的功能,都没来得及尝试

(六) 题外话

等过段时间有空了,要封装成一个工具类,在各个平台上使用下SevenZipSharp,以及研究下它的源码。

希望路过的大神能提点意见,让我这个菜鸟能够更快成长。谢谢。

SevenZipSharp的入门教程(包含如何加密压缩,解密压缩)的更多相关文章

  1. flask的模板引擎jinja入门教程 包含一个通过网络实时传输Video视频流的示例

    本文首发于个人博客https://kezunlin.me/post/1e37a6/,欢迎阅读最新内容! tutorial to use python flask jinja templates and ...

  2. 2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等

    2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等  官方论坛弄来的  如果在官方下载需要权限的  挺不错教程 想学习易语言入门到精通 post hook  js改写的可以看 ...

  3. 通过遍历JSON键值对获取包含某字符串的键的值_电脑计算机编程入门教程自学

    首发于:Aardio通过遍历JSON键值对获取包含某字符串的键的值_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=429 ...

  4. Linux基础入门教程

    Linux基础入门教程 --------- Linux学习路径 Linux学习者,常常不知道自己改怎么学习linux:Linux初级,也就是入门linux前提是需要有一些计算机硬件相关的知识或是有一下 ...

  5. kafka入门教程链接

    http://www.aboutyun.com/forum.php?mod=viewthread&tid=12882 经典入门教程 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创 ...

  6. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  7. ant使用指南详细入门教程

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...

  8. ActiveReports 报表控件官方中文入门教程 (1)-安装、激活以及产品资源

    本系列文章主要是面向初次接触 ActiveReports 产品的用户,可以帮助您在三天之内轻松的掌握ActiveReports控件的基本使用方法,包括安装.激活.创建报表.绑定数据源以及发布等内容.本 ...

  9. 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨)  ...

随机推荐

  1. JAVA中断机制详解

    Java提供了中断机制,可以使用它来结束一个线程.这种机制要求线程检查它是否被中断了,然后决定是不是响应这个中断请求.线程允许忽略中断请求并继续执行.Java的中断是一种协作机制.也就是说调用线程对象 ...

  2. gcc编译

    一个C/C++文件要经过预处理.编译.汇编和连接等4步才能变成可执行文件:     (1)以#开头的命令被统称为预处理,比如"#include",宏定义命令"#defin ...

  3. JAVA中事物以及连接池

    一.事物 什么是事物? 事务,一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元.这些单元要么全都成功,要么全都不成功. 做一件事情,这个一件事情中有多个 ...

  4. 终端的CTRL+S 解说

    在很多类Unix 的系统上,Ctrl-S 都有特殊的含义:它会"冻结"终端(它曾 经被用来暂停快速滚动).因为"保存"一般也是用这个快捷键,所以经常 会有人不假 ...

  5. SpringMVC中使用@Value给非String类型注入值

    String类型的@Value注入方式 String类型的直接可以使用 @Value("陈婉清") private String name; 非String类型的@Value注入方 ...

  6. /proc/kcore失效,调试其文件系统相关模块,使重新正常工作

    为分析内核,在有限的机器上用虚拟机装了CentOS.6.9.i386.minimal,重新编译了3.19.8内核并克隆.当使用/proc/kcore进行内核动态映像调试时,发现与kgdb远程调试端读到 ...

  7. 求一个整数数组最大子数组之和,时间复杂度为N

    #include<iostream.h> int main () { ]={-,-,-,-,-,-,-,-,-,-}; ],sum=; ;i<;i++) { ) { sum=b[i] ...

  8. python基础学习笔记

    #!/usr/bin/env python #coding=utf-8 def login(username): if username=='bill': return 1 else: return ...

  9. makefile介绍1.0

    1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...

  10. (转) Java RMI 框架(远程方法调用)

    "原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://haolloyin.blog.51cto.com/1177454/33 ...