SharpCompress压缩和解压缩,并解决压缩的中文乱码问题
一.下载SharpCompress库
二.解压缩
(1)不带密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /// <summary> /// 解压缩(支持rar,zip) /// </summary> /// <param name="fromFilePath">待解压文件全路径</param> /// <param name="outFileDirectory">解压文件后目录</param> public static void Decompress( string fromFilePath, string outFileDirectory) { var archive = ArchiveFactory.Open(fromFilePath); foreach ( var entry in archive.Entries) { if (!entry.IsDirectory) { //Debug.WriteLine(entry.Key); entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true , Overwrite = true }); } } } |
(2)带密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /// <summary> /// 解压缩加密的包(支持rar,zip) /// </summary> /// <param name="fromFilePath">待解压文件全路径</param> /// <param name="outFileDirectory">解压文件后目录</param> /// <param name="password">密码</param> public static void DecompressWithPwd( string fromFilePath, string outFileDirectory, string password) { using ( var archive = ArchiveFactory.Open(fromFilePath, new ReaderOptions { Password = password })) { foreach ( var entry in archive.Entries) { if (!entry.IsDirectory) { //Debug.WriteLine(entry.Key); entry.WriteToDirectory(outFileDirectory, new ExtractionOptions { ExtractFullPath = true , Overwrite = true }); } } } } |
三.压缩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /// <summary> /// 压缩(zip格式) /// </summary> /// <param name="fromFileDirectory">待压缩目录</param> /// <param name="outFilePath">压缩后文全件路径</param> public static void ZipCompress( string fromFileDirectory, string outFilePath) { //解决中文乱码问题 SharpCompress.Common.ArchiveEncoding ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding(); ArchiveEncoding.Default = Encoding.GetEncoding( "utf-8" ); SharpCompress.Writers.WriterOptions options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate); options.ArchiveEncoding = ArchiveEncoding; using ( var archive = ZipArchive.Create()) { archive.AddAllFromDirectory(fromFileDirectory); using ( var zip = File.OpenWrite(outFilePath)) archive.SaveTo(zip, options); } } |
四.调用
1 2 3 4 5 6 7 8 9 | //压缩 string fromFileDirectory = @"C:\test\我是目录" ; string outFilePath = @"C:\压缩包1.zip" ; CompressHelper.ZipCompress(fromFileDirectory, outFilePath); //解压缩 string fromFilePath = @"C:\压缩包1.zip" ; string outFileDirectory = @"C:\解压目录\压缩包1" ; CompressHelper.Decompress(fromFilePath, outFileDirectory); |
五.中文乱码问题
老版本直接加入下面一行代码就可以了
SharpCompress.Common.ArchiveEncoding.Default = Encoding.GetEncoding ("utf-8");
但是我使用的是0.23.0版本,.ArchiveEncoding已经从静态类改为普通类了,无法这样调用
参考:https://github.com/adamhathcock/sharpcompress/issues/268
最后发现:ArchiveEncoding类是OptionsBase的属性,而OptionsBase是WriterOptions的基类,ZipArchive的SaveTo方法带WriterOptions参数,那就ok了
参考:
wiki:https://github.com/adamhathcock/sharpcompress/wiki/API-Examples
支持类型:https://github.com/adamhathcock/sharpcompress/wiki/Supported-Formats
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2017-03-21 Linux netstat命令详解
2017-03-21 服务器开发工具