压缩解压缩

核心库NewLife.Core内置了压缩相关功能扩展,并且独立实现的ZipFile还支持.NET2.0和.NET4.0,该类在.NET4.5以后成为.NET Framework框架标配。

数据流压缩

IOHelper类扩展了字节数组和数据流的压缩扩展方法

Byte[] Compress(this Byte[] data);
Byte[] Decompress(this Byte[] data);
Stream Compress(this Stream inStream, Stream outStream = null);
Stream Decompress(this Stream inStream, Stream outStream = null);
Stream CompressGZip(this Stream inStream, Stream outStream = null);
Stream DecompressGZip(this Stream inStream, Stream outStream = null);

从.NET2.0开始,就内置了Deflate压缩算法,这是很常见的一种数据压缩算法,HTTP常用它进行压缩,压缩比一般,但是压缩速度很好。上述字节数组和数据流的扩展就是对DeflateStream的简单封装,以兼容.NET2.0之上的所有应用(不同NFX版本的DeflateStream用法有所不同)。

而GZip则是一种数据格式,多了个头部,数据体部分还是Deflate压缩。因此,数据流压缩直接用Deflate算法,而压缩为文件时,则使用GZip,一般用gz后缀。

例如,XCode导出整表数据时,为了减小文件大小,会直接输出到用GZipStream包装的文件流。

文件压缩

PathHelper类扩展了文件和目录的压缩及解压缩。

void Extract(this FileInfo fi, String destDir, Boolean overwrite = false);
void Compress(this FileInfo fi, String destFile);
void Compress(this DirectoryInfo di, String destFile = null);

Extract把压缩文件解压缩到目标目录,支持覆盖已存在文件。一般用于压缩备份和数据恢复场合。

注意:.zip后缀文件采用ZipFile类处理,其它后缀仅支持在Windows上调用7z处理,下同

Compress把文件压缩到目标文件,一般用于压缩备份日志等文本文件,有很大的压缩比。

Compress另一个重载,把目录压缩到目标文件,一般用于压缩备份整个目录,如配置文件目录等。

ZipFile压缩

Zip压缩文件实现类ZipArchive,而ZipFile扩展了常用方法。

// 打开压缩文档
ZipArchive Open(String archiveFileName, ZipArchiveMode mode, Encoding entryNameEncoding = null);
// 从目录创建压缩文档
void CreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName, CompressionLevel compressionLevel, Boolean includeBaseDirectory);

压缩文件:

using var zip = ZipFile.Open(destFile, ZipArchiveMode.Create);
zip.CreateEntryFromFile(fi.FullName, fi.Name, CompressionLevel.Optimal);

解压缩文件:

using var zip = ZipFile.Open(fi.FullName, ZipArchiveMode.Read, null);
var di = Directory.CreateDirectory(destDir);
var fullName = di.FullName;
foreach (var item in zip.Entries)
{var fullPath = Path.GetFullPath(Path.Combine(fullName, item.FullName));if (!fullPath.StartsWith(fullName, StringComparison.OrdinalIgnoreCase))throw new IOException("IO_ExtractingResultsInOutside");if (Path.GetFileName(fullPath).Length == 0){if (item.Length != 0L) throw new IOException("IO_DirectoryNameWithData");Directory.CreateDirectory(fullPath);}else{Directory.CreateDirectory(Path.GetDirectoryName(fullPath));try{item.ExtractToFile(fullPath, overwrite);}catch { }}
}

Zip文件本质上就是一个档案数据库,头部有目录,后面就是各个被压缩文件的数据。通过扩展方法或者构造函数拿到ZipArchive后,直接CreateEntry就可以加入要压缩的文件,或者遍历Entries集合就得到内部每个被压缩文件。

7z压缩

SevenZip类用于对7z.exe进行包装,在Windows上处理各种类型压缩文件,它拥有极高的压缩比,在某些维护性系统中具有无可比拟的优势。

SevenZip首先在附近目录查找7z.exe,然后在注册表查找安装路径,实在找不到就从X组件资源站下载 http://x.newlifex.com/7z_v16.04.zip 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

累~

真累~!!!转载于:https://blog.51cto.com/jianchi1825/159002

在以下说法错误的是_外行人对翡翠有哪些错误认知?行家给你最精准的答案

玉石行业虽然在我们国家有着很悠久的历史!但是就行业认知而言,仍然属于小众行业。正所谓隔行如隔山,在很多外行人眼里,翡翠行业很神秘,而且水也很“深”!甚至很多人认为这个行业“三年不开张,开…

参加美赛,需掌握这些算法和模型

昨天晚上的直播甚是精彩 方同学不但分享了 获奖论文、解题技巧 还分享了 赛前准备、比赛经验和日程规划 po几张截图让大家感受下 此时此刻可能会有不少童鞋 正在为错过直播而懊悔 不用担心 超模君又准备了一份豪华大礼 本周 超模君特意邀请到 今年美赛A题特等奖获奖者 徐乾同学…

yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践

‍‍点击关注“有赞coder”获取更多技术干货哦~作者:子固部门:数据中台一、背景有赞是一个商家服务公司,致力于帮助每一位重视产品和服务的商家成功。随着移动互联网的流量增长红利渐渐褪去,商家获得新的流量越来越困难…

分布式数字签名令牌TokenProvider

在分布式系统中,令牌签发系统往往需要跟令牌应用系统分离,并且应用系统可以独立验证令牌,无需请求签发系统接口。数字签名令牌属于发明专利《基于令牌协议的令牌组网构建方法》(已授权专利号201510213377.X)的一部分&a…

热力地图高德_高德地图:最新动态

高德地图是国内最专业的手机地图,超过3.2亿用户在使用!高德地图是应用商店上数据准确率最高、最省流量、躲避拥堵功能最强大的手机地图,平均每天为用户省油61万升!高德地图今日宣布上线货车导航功能,帮助全国3000万货车…

有效处理 Java 异常三原则

Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮、易于调试。 异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? 在有效使用异常的情况下&#x…

python读取日志错误信息_关于修复 Bug 这件“小事”|利用Python 日志查找错误也可行...

在 Python 中使用 print() 来输出某个变量从而检查参数错误是修 Bug 前期工作的常用手段。但其实 Python 日志处理用得好会节省时间用于修Bug。记日志会帮助我们理解程序中发生的事以及事情发生的顺序,也能直接观察到整个程序某个值的变化过程。不过以下5个操作细节…

人口危机 资本剥削导致生育率低迷

不久前,相关部门公布数据,2020年出生并已经到公安机关进行户籍登记的新生儿共1003.5万。对此,铁流先不做评论,我们先看数据。以下是1949年和1981年以来人口出生情况:1949年: 1275万......1981年:2064万1982…

博客园程序源代码下载

http://www.cnblogs.com/dudu/archive/2004/08/30/37613.aspx 转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/05/20/1472333.html

连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需

随着科技的进步,现在家家户户大街小巷都是Wifi信号,所以无线基地已经成为生活中不可缺少的一环,但也因为这样无线干扰的情况,常常听到有人抱怨怎么无线又突然断线啦?我的wifi又连不上了?为什么无线上网速度…

关于机器学习,你应该至少学习这8个落地案例|干货集锦

机器学习、深度学习、强化学习、迁移学习,这些你到底了解多少?各种深度学习框架如TensorFlow、Caffe、MXNet等又该如何选择?如何将机器学习整合到正在开发的应用中?机器学习在金融、电商、外卖、教育等领域有哪些落地案例&#xf…

python实用脚本 知乎_停课不停学|38 个免费 Python 项目合集,从小白到老司机!...

1665 年,牛顿在剑桥三一学院就读期间,伦敦发生了著名的鼠疫。这场鼠疫几乎摧毁了整个伦敦城,无论是下层人民还是王室贵族都难逃魔掌,几乎五分之一的伦敦人都在这场鼠疫中丧生。牛顿被迫回家进行自我隔离,但就是这段清静…

c++经典编程题_全国青少年软件编程等级考试C语言经典程序题10道十

全国青少年软件编程等级考试C语言经典程序题10道十【程序91】题目:时间函数举例11.程序分析:2.程序源代码:#include "stdio.h"#include "time.h"void main(){ time_t lt; /*define a longint time varible*/lttime(NULL)…

[流水账]毕业?工作?

离正常毕业时间还有1年多, 没想到这么早就开始感受到毕业的气息了. 前几天收到去参加IBM中国研究院校友座谈会的邀请, 因为有事没过去, 今天又接到了校友蒋师兄的电话来了解我的个人情况. 接到电话时蒋师兄先核对了一下信息, 然后要我介绍一下自己, 我做事一向比较谨慎, 对涉及…

使用SQL Server分区表功能提高数据库的读写性能

首先祝大家新年快乐,身体健康,万事如意。一般来说一个系统最先出现瓶颈的点很可能是数据库。比如我们的生产系统并发量很高在跑一段时间后,数据库中某些表的数据量会越来越大。海量的数据会严重影响数据库的读写性能。这个时候我们会开始优化…

回顾周杰伦17年间的歌词,才知道他都唱了些什么

每当提到周杰伦的歌时,你首先会想到的是什么呢?双截棍?中国风?还是是方文山?或者更会有人回答说:根本听不清的歌词…… 回想起来,周杰伦的歌可以说陪伴了我们一代甚至是几代人的成长。无论是《晴…

最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先

题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree难度:中等通过率:57.2%题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:"对于有根树…

开启事物_《原神》全新角色甘雨登场 「浮生孰来」活动祈愿开启_新闻资讯_最新手游时评_原创手游资讯...

璃月地区的方方面面,都由「璃月七星」治理。由他们决议得出的策略牵动着市场的走向,因此每一条都要慎重再三。而会议之后,是谁摘录出要点,编入长长的条例中的,人们便不得而知了。璃月的千头万绪,就是这样被…

我遇到的单词

pros and cons支持者和反对者,用于辩论from scratch 从头做起转载于:https://blog.51cto.com/techfans/160809