博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用SevenZipSharp压缩/解压7z格式
阅读量:5071 次
发布时间:2019-06-12

本文共 2126 字,大约阅读时间需要 7 分钟。

7z格式采用的LZMA算法,号称具有现今最高压缩率。笔者在nuget上搜索7z,在搜索结果中最终选择了SevenZipSharp来进行压缩/解压。不得不说,SevenZipSharp的API设计得非常方便。

压缩调用:

using (FileStream ostream = new FileStream(outputpath, FileMode.Create, FileAccess.Write)){    using (FileStream istream = new FileStream(inputpath, FileMode.Open, FileAccess.Read))    {        SevenZipCompressor compressor = new SevenZipCompressor();        // 这里可以输入多个文件名/流对        Dictionary
dict = new Dictionary
{ { inputpath, istream } }; compressor.CompressStreamDictionary(dict, ostream); }}

解压调用:

using (FileStream istream = new FileStream(inputpath, FileMode.Open, FileAccess.Read)){    SevenZip.SevenZipExtractor extractor = new SevenZip.SevenZipExtractor(istream);    extractor.ExtractArchive(outputpath);    // 全部解压到指定目录    using (FileStream ostream = new FileStream(outputpath, FileMode.Create, FileAccess.Write))    {        extractor.ExtractFile(0, ostream);        // 流式解压指定文件    }}

顺便附上zlib的压缩/解压(使用zlib.net库):

// 压缩static void Compress(string inputpath, string outputpath){    using (FileStream ostream = new FileStream(outputpath, FileMode.Create, FileAccess.Write))    {        using (FileStream istream = new FileStream(inputpath, FileMode.Open, FileAccess.Read))        {            using (ZOutputStream zstream = new ZOutputStream(ostream, zlibConst.Z_BEST_COMPRESSION))            {                CopyStream(istream, zstream);            }        }    }}// 解压static void Decompress(string inputpath, string outputpath){    using (FileStream ostream = new FileStream(outputpath, FileMode.Create, FileAccess.Write))    {        using (FileStream istream = new FileStream(inputpath, FileMode.Open, FileAccess.Read))        {            using (ZOutputStream zstream = new ZOutputStream(ostream))            {                CopyStream(istream, zstream);            }        }    }}static void CopyStream(Stream input, Stream output){    byte[] buffer = new byte[2000];    int len;    while ((len = input.Read(buffer, 0, 2000)) > 0)    {        output.Write(buffer, 0, len);    }    output.Flush();}

转载于:https://www.cnblogs.com/libla/p/5824324.html

你可能感兴趣的文章
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>