博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 读取压缩文件方式及乱码处理
阅读量:7098 次
发布时间:2019-06-28

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

目前主流的压缩文件操作类,除了C#原生的。还有

1. ZIP-DotNetZip

网址: 

2 7Zip-SevenZipSharp

网址: 

支持的格式比上面多,如:7Zip,RAR,ZIP,Gzip,Cab,LZH等等。注意,除了引用这个组件之外,还需要加7z.dll文件拷贝到bin目录中,因为是对7z.dll的一个封装。

3 综合-SharpCompress 

网址:

支持的格式更多,如RAR,ZIP,Tar,7Zip等等。这个开源项目好像是去年才开始的,在其他几个开源的项目基础上发展而来,也包括了,项目。当然对RAR也只是解压.

 

中文支持问题:

推荐:SevenZipSharp

1.速度快。

2.支持中文,不会有乱码。

3.接口类定义明确,实用。

 

SharpCompress 对中文支持不好。

原因:在使用BinaryReader时,SharpCompress 会读取文件的Header的编码,没有时 默认使用UTF-8的读取。造成乱码文件。

但同时也有解决方案。(不建议修改SharpCompress的源码)。

只需要在调用前 修改下 SharpCompress的编码方式.

public static void Reader(string filePath)        {            using (Stream stream = File.OpenRead(filePath))            {                //设置编码为 Default                SharpCompress.Common.ArchiveEncoding.Default = System.Text.Encoding.Default;                var reader = ReaderFactory.Open(stream);                while (reader.MoveToNextEntry())                {                    Console.WriteLine("测试");                }            }        }

 但相比较而言,性能还是没有SevenZipSharp好,所以还是推荐SevenZipSharp。

 

后记:SevenZipSharp的怪现象

使用framework 4.5 编译时  会报can't load  7z.dll  failed to load library。

将项目 改为4.0 后 再运行OK了,再改为 4.5  又不报错了。

内部运行代码 NativeMethods.cs

[DllImport("kernel32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)]        public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string fileName);

 

 

 

推荐文章:http://www.cnblogs.com/asxinyu/archive/2013/03/05/2943696.html

转载于:https://www.cnblogs.com/shikyoh/p/5018914.html

你可能感兴趣的文章
Java synchronized详解
查看>>
Frameset使用教程
查看>>
局域网与internet
查看>>
request
查看>>
Beyond Compare乱码问题汇总
查看>>
线程和线程池
查看>>
Camstar开发常用数据库表及其关联
查看>>
html中的一些按钮之类的操作
查看>>
走进 AQS 瞧一瞧看一看
查看>>
NO18 linux开机自启动设置--开机流程--中文乱码--查看行数
查看>>
Java的四种内部类
查看>>
10-16C#for...循环语句(2)
查看>>
CentOS查看软件源提供的软件版本命令
查看>>
caffe 学习记录1及网络结构
查看>>
html5学习笔记——html新增属性(四)
查看>>
收藏的链接
查看>>
【原创】5月份月会总结
查看>>
手机号码归属地查询
查看>>
IO和socket编程
查看>>
Docker结合Jenkins构建持续集成环境
查看>>