【转】使用SevenZipSharp压缩、解压文件
引用
下载之后引用“SevenZipSharp.dll”至项目中,然后将“7z.dll”放到bin目录下,或者这样引用:SevenZipCompressor.SetLibraryPath("c:\\7z.dll");//引用7Z.dll
因为SevenZipSharp本身无法独立工作,需要使用7z.dll来配合工作。
class Program
{
static void Main(string[] args)
{
// 指定7z动态库文件路径,默认是"7z.dll"
SevenZipBase.SetLibraryPath("7za.dll"); var compressor = new SevenZipCompressor();
// 可以在构造时指定临时文件夹
//var compressor = new SevenZipCompressor("Temp"); // 打印临时文件夹路径
Console.WriteLine(compressor.TempFolderPath); // 设置压缩等级
compressor.CompressionLevel = CompressionLevel.Normal; // 指定压缩包格式,默认为7z。
// 如果使用的7za.dll则只能使用7z格式。
compressor.ArchiveFormat = OutArchiveFormat.SevenZip; // 是否保持目录结构,默认为true。
compressor.DirectoryStructure = true; // 是否包含空目录,默认true。
compressor.IncludeEmptyDirectories = true; // 压缩目录时是否使用顶层目录,默认false
compressor.PreserveDirectoryRoot = false; // 加密7z头,默认false
compressor.EncryptHeaders = false; // 文件加密算法
compressor.ZipEncryptionMethod = ZipEncryptionMethod.ZipCrypto; // 尽快压缩(不会触发*Started事件,仅触发*Finished事件)
compressor.FastCompression = false; // 单个文件开始压缩
compressor.FileCompressionStarted += (sender, eventArgs) =>
{
Console.WriteLine($"正在压缩:{eventArgs.FileName}");
Console.WriteLine($"进度:{eventArgs.PercentDone}%");
}; // 单个文件压缩完成时
compressor.FileCompressionFinished += (sender, eventArgs) =>
{
Console.WriteLine("FileCompressionFinished");
}; compressor.Compressing += (sender, eventArgs) =>
{
Console.WriteLine(eventArgs.PercentDelta);
Console.WriteLine(eventArgs.PercentDone);
}; // 压缩完成
compressor.CompressionFinished += (sender, eventArgs) =>
{
Console.WriteLine("CompressionFinished");
}; // 添加文件
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
var files = new string[] {$"{baseDir}123.txt", $"{baseDir}456.txt"};
compressor.CompressFiles("Files.7z", files); // 添加目录下的所有文件
compressor.CompressDirectory($"{baseDir}Dir", "Dir.7z"); Console.ReadKey();
}
}
解压缩
class Program
{
static void Main(string[] args)
{
// 指定7z动态库文件路径,默认是"7z.dll"
SevenZipBase.SetLibraryPath("7za.dll"); var extractor = new SevenZipExtractor("Dir.7z"); extractor.Extracting += (sender, eventArgs) =>
{
Console.WriteLine("OnExtracting");
}; // 文件数量(文件夹也算)
Console.WriteLine(extractor.FilesCount); // 压缩包字节数
Console.WriteLine(extractor.PackedSize); // 压缩文件属性
foreach (var fileProp in extractor.ArchiveProperties)
{
Console.WriteLine(fileProp.ToString());
} // 遍历文件名
foreach (var fileName in extractor.ArchiveFileNames)
{
Console.WriteLine(fileName);
} // 遍历文件数据
foreach (var fileData in extractor.ArchiveFileData)
{
Console.WriteLine(fileData.ToString());
} // 是否使用的固实压缩
Console.WriteLine(extractor.IsSolid); // 解压后的大小
Console.WriteLine(extractor.UnpackedSize); extractor.ExtractArchive("Unpack"); Console.ReadKey();
}
}
注意事项
【转】使用SevenZipSharp压缩、解压文件的更多相关文章
- 通过SharpZipLib来压缩解压文件
在项目开发中,一些比较常用的功能就是压缩解压文件了,其实类似的方法有许多 ,现将通过第三方类库SharpZipLib来压缩解压文件的方法介绍如下,主要目的是方便以后自己阅读,当然可以帮到有需要的朋友更 ...
- 使用SevenZipSharp压缩/解压7z格式
7z格式采用的LZMA算法,号称具有现今最高压缩率.笔者在nuget上搜索7z,在搜索结果中最终选择了SevenZipSharp来进行压缩/解压.不得不说,SevenZipSharp的API设计得非常 ...
- 【转载】.NET压缩/解压文件/夹组件
转自:http://www.cnblogs.com/asxinyu/archive/2013/03/05/2943696.html 阅读目录 1.前言 2.关于压缩格式和算法的基础 3.几种常见的.N ...
- .NET使用ICSharpCode.SharpZipLib压缩/解压文件
SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...
- huffman压缩解压文件【代码】
距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...
- C#使用SharpZipLib压缩解压文件
#region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...
- linux压缩解压文件
首先进入文件夹 cd /home/ftp2/1520/web 压缩方法一:压缩web下的888.com网站 zip -r 888.com.zip888.com 压缩方法二:将当前目录下的所有文件和文件 ...
- Freebsd下压缩解压文件详解
压缩篇: 把/usr/webgames目录下的文件打包.命名为bak.tar.gz 放到/usr/db-bak目录里 下面命令可以在任意目录执行.无视当前目录和将要存放文件的目录.tar -zcvf ...
- 跨平台的zip文件压缩处理,支持压缩解压文件夹
根据minizip改写的模块,需要zlib支持 输出的接口: #define RG_ZIP_FILE_REPLACE 0 #define RG_ZIP_FILE_APPEND 1 //压缩文件夹目录, ...
- tar压缩解压文件
查看visualization1.5.tar.gz 压缩包里面的内容: $ tar -tf visualization1.5.tar.gz 解压指定文件JavascriptVisualRelease/ ...
随机推荐
- 洛谷 P4408 逃学的小孩 解题报告
P4408 [NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?&q ...
- scrapy 部署
下面简单介绍两种部署的方式,第一种也是我们最常用的crontab定时任务+日志,第二种则是scrapyd部署. 遇到的第一个问题,就是如何将编写好的spider启动: 最简单的方式: 1.在spide ...
- codeforces 793B - Igor and his way to work(dfs、bfs)
题目链接:http://codeforces.com/problemset/problem/793/B 题目大意:告诉你起点和终点,要求你在只能转弯两次的情况下能不能到达终点.能就输出“YES”,不能 ...
- 斯坦福大学公开课机器学习:Neural network-model representation(神经网络模型及神经单元的理解)
神经网络是在模仿大脑中的神经元或者神经网络时发明的.因此,要解释如何表示模型假设,我们先来看单个神经元在大脑中是什么样的.如下图,我们的大脑中充满了神经元,神经元是大脑中的细胞,其中有两点值得我们注意 ...
- IDEA进行远程调试
biz-test本地调用测试环境01机器上面的needle项目,卡在查询数据库的地方(Jade停住不走了) 首先配置 相关项目 的服务器端部署jvm参数: 在needle的config.pp.temp ...
- Java内存模型概念简单介绍,想深入自行百度
- C# 多窗体之间方法调用
看似一个简单的功能需求,其实很多初学者处理不好的,很多朋友会这么写: //父窗体是是frmParent,子窗体是frmChildA //在父窗体中打开子窗体 frmChildA child = new ...
- 面向对象【day07】:多态(九)
本节内容 概述 多态 小结 一.概述 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作 ...
- Java 编程下使用 Class.forName() 加载类【转】
在一些应用中,无法事先知道使用者将加载什么类,而必须让使用者指定类名称以加载类,可以使用 Class 的静态 forName() 方法实现动态加载类.下面的范例让你可以指定类名称来获得类的相关信息. ...
- Python基础-day02
写在前面 上课第二天,打卡: 大人不华,君子务实. 一.进制相关 - 进制基础 数据存储在磁盘上或者内存中,都是以0.1形式存在的:即是以 二进制 的形式存在: 为了存储和展示,人们陆续扩展了数据的表 ...