目前主流的壓縮文件操作類,除了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等等。這個開源項目好像是去年才開始的,在其他幾個開源的項目基礎上發展而來,也包括了DotNetZip,Nunrar項目。當然對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