(一)為什麽選擇7z
7z 是一種主流高效的壓縮格式,它擁有極高的壓縮比。在計算機科學中,7z是一種可以使用多種壓縮算法進行數據壓縮的檔案格式。該格式最初被7-Zip實現並采用,但是這種檔案格式是公有的,並且7-Zip軟件本身亦在GNU寬通用公共許可證 (GNU LGPL)協議下 開放源代碼。目前LZMA軟件開發工具包的最新版本為V9.34。7z格式的MIME類型為application/x-7z-compressed。 通常使用 7-Zip 的 7z 格式能比使用 zip 格式的壓縮文件小 30-70%。 並且使用 7-Zip 創建的 zip 格式比大多數其它壓縮軟件創建的都小 2-10%。(二) SevenZipSharp初始化工作
1、首先通過nuget獲取 SevenZipSharp;
2、由於SevenZipSharp 是依賴於7z.dll的,所以你要單獨添加7z.Dll放到你項目文件下的Bin目錄,放這個的時候,要註意下系統是要用32位,還是64的呢?如果弄錯會報這個錯誤”an not load 7-zip library or internal COM error! message: DLL file does not exist“
3、如果你不按照第二步那種做法,你想自己指定7z.dll的位置。你可以這麽做
var path = "~/App_Data/7z/7z.dll"; SevenZipBase.SetLibraryPath(path);
然後可能有些同學不太明白我說什麽,先來這裏把7z.dll下載下來再說吧。https://github.com/gdoujkzz/7zdll.git
(三) 使用SevenZipSharp 進行壓縮
普通壓縮(不加密壓縮)
var tmp = new SevenZipCompressor(); //7z壓縮 tmp.ScanOnlyWritable = true; //只可寫 //tmp.CompressFiles()這個有三個重載,這裏只講其中一個比較常用的。 //public void CompressFiles(string archiveName, params string[] fileFullNames) //archiveName:這個是代表生成的7z文件存在哪裏 //fileFullNames:這個參數是要壓縮的文件是一個params數組,特別註意必須是完整的路徑名才有效 tmp.CompressFiles(@"D:\max\arch.7z", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test.txt", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test1.txt"); //tmp.CompressDirectory 壓縮指定路徑下面的所有文件,這個有12個重載,也只講其中一個簡單的。 // public void CompressDirectory( string directory, string archiveName) tmp.CompressDirectory(@"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug", @"arch.7z");
加密壓縮
其實也是和剛剛一樣,看代碼。
var tmp = new SevenZipCompressor(); tmp.CompressFilesEncrypted(@"D:\max\jiami.7z", "123456", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test1.txt", @"D:\max\SourceCode\DataExch\SevenZipSharpDemo\bin\Debug\test.txt")
壓縮文件要加密,我暫時看到是只有這一種方式,如果大家有其他建議或不同,歡迎交流,謝謝。
(四) 使用SevenZipSharp 進行解壓
普通解壓
using (var tmp = new SevenZipExtractor(@"d:\max\noEncrypted.7z")) { //7z文件路徑 for (int i = 0; i < tmp.ArchiveFileData.Count; i++) { tmp.ExtractFiles(@"d:\max\", tmp.ArchiveFileData[i].Index); //解壓文件路徑 } }
//同樣他也是支持界面某個路徑下面的7z包的
//temp.ExtractArchive(path);
加密文件解壓
using (var tmp = new SevenZipExtractor(@"d:\max\jiami2.7z","123456")) { //7z文件路徑和7z文件密碼 for (int i = 0; i < tmp.ArchiveFileData.Count; i++) { tmp.ExtractFiles(@"d:\max\test\", tmp.ArchiveFileData[i].Index); //解壓文件路徑 } }
(五)其他功能
除了上面所說的一些基本功能之外, 還有下面這些功能。
(1)SevenZipSharp支持跨平臺,可以在Mono上面使用。
(2)SevenZIpSharp還支持進行異步的壓縮和解壓。
(3)還支持多卷壓縮和解壓
(4)還支持...還有很多厲害的功能,都沒來得及嘗試
(六) 題外話
等過段時間有空了,要封裝成一個工具類,在各個平臺上使用下SevenZipSharp,以及研究下它的源碼。
希望路過的大神能提點意見,讓我這個菜鳥能夠更快成長。謝謝。
Tags:
文章來源: