最近项目需要做一个自动更新功能,即将更新压缩包下载过来,进行解压替换。这时需要进行解压,据说C# 4.5以上已经自带解压的库了,因为是老项目是4.0版本的,需要借助第三方库才能完成。因为压缩格式自己定,那当然使用开源的7zip格式。
7zip官网 https://www.7-zip.org/
使用用 SevenZipSharp
markhor 创建了SevenZipSharp 项目,SevenZipSharp 是开源的,里面实现了自解压和压缩所有7-ZIP支持的格式.它改进了7-Zip动态链接库的C#接口的一些方法.
常用压缩/解压缩示例(引自SevenZipSharp示例文件):
链接:https://pan.baidu.com/s/10dpjXkrguXUzrGgYuPHfpA
提取码:eb5k
7z.dll应该是安装了7zip之后生成的,发现360压缩也是使用的7z.dll. 发现SevenZipSharp本身不能解压,而是通过7zip官网上的SDK操作7z.dll来完成。7z.dll不是c#的动态库。
使用:下载上面的源码并使用VS2010打开,生成 SevenZipSharp.dll
1.创建项目
将7z.dll放到执行目录
引用SevenZipSharp.dll
2. 开始使用
解压缩文件
using (SevenZipExtractor tmp = new SevenZipExtractor(@"d:\Temp\7z465_extra.7z"))
{
for (int i = 0; i < tmp.ArchiveFileData.Count; i++)
{
tmp.ExtractFiles(@"d:\temp\!Пусто\", tmp.ArchiveFileData[i].Index);
}
//tmp.ExtractFiles(@"d:\temp\!Пусто\", 1, 3, 5);
}
分卷压缩
SevenZipExtractor.SetLibraryPath(@"d:\Work\Misc\7zip\9.04\CPP\7zip\Bundles\Format7zF\7z.dll");
using (SevenZipExtractor tmp = new SevenZipExtractor(@"d:\Temp\SevenZip.7z.001"))
{
tmp.ExtractArchive(@"d:\Temp\!Пусто");
}
压缩文件
SevenZipCompressor tmp = new SevenZipCompressor();
tmp.CompressFiles(@"d:\Temp\arch.7z", @"d:\Temp\log.txt");
tmp.CompressDirectory(@"c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\1033", @"D:\Temp\arch.7z");
压缩ZIP文件
SevenZipCompressor tmp = new SevenZipCompressor();
tmp.ArchiveFormat = OutArchiveFormat.Zip;
tmp.CompressFiles(@"d:\Temp\arch.zip", @"d:\Temp\gpl.txt", @"d:\Temp\ru_office.txt");
参考 https://www.cnblogs.com/jxnclyk/archive/2010/04/03/1703844.html