C# 讀取壓縮文件方式及亂碼處理


目前主流的壓縮文件操作類,除了C#原生的。還有

1. ZIP-DotNetZip

網址:http://dotnetzip.codeplex.com/ 

2 7Zip-SevenZipSharp

網址:http://sevenzipsharp.codeplex.com/ 

支持的格式比上面多,如:7Zip,RAR,ZIP,Gzip,Cab,LZH等等。注意,除了引用這個組件之外,還需要加7z.dll文件拷貝到bin目錄中,因為SevenZipSharp是對7z.dll的一個封裝。

3 綜合-SharpCompress 

網址:http://sharpcompress.codeplex.com/

支持的格式更多,如RAR,ZIP,Tar,7Zip等等。這個開源項目好像是去年才開始的,在其他幾個開源的項目基礎上發展而來,也包括了DotNetZipNunrar項目。當然對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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM