從 .NET Framework 4.5 版本開始,微軟為 .NET 類庫增加了一個名為 ZipFile 的類型。該類型在 System.IO.Compression 命名空間下,提供創(chuàng)建、解壓縮和打開 zip 存檔的靜態(tài)方法。若要在 .NET Framework 應(yīng)用中使用 ZipFile 類,必須添加對程序集 System.IO.Compression.FileSystem 的引用。
參考鏈接:
https://docs.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile?view=net-6.0
使用以下代碼讀取壓縮文件內(nèi)容:
var fn = @"test.zip";using (var zip = ZipFile.OpenRead(fn)){ foreach (var entry in zip.Entries) { Console.WriteLine("文件名:{0}", entry.FullName); using (var stream = entry.Open()) using (var reader = new StreamReader(stream)) { var str = reader.ReadToEnd(); Console.WriteLine(str); } }}
但是,有時候上述代碼會不好用。當(dāng)遇到一個較大的 zip 文件時可能會報錯:
Number of entries expected in End Of Central Directory does not correspond to number of entries in Central Directory.
關(guān)于該錯誤,只能搜索到零星的答案,而且大部分都是從國外網(wǎng)站機翻的沒有任何參考價值。
SharpZipLib在 NuGet 上以 zip 為關(guān)鍵詞搜索時,排名第二的是一個名為 SharpZipLib 的軟件包。
SharpZipLib : https://www.nuget.org/packages/SharpZipLib/
示例代碼:
var fn = @"test.zip";using (var zip = new ZipFile(fn)){ foreach (ZipEntry entry in zip) { Console.WriteLine("文件名:{0}", entry.Name); using (var stream = zip.GetInputStream(entry)) using (var reader = new StreamReader(stream)) { var str = reader.ReadToEnd(); Console.WriteLine(str); break; } }}
在遇到同樣的 zip 包時,上述代碼沒有報錯,但結(jié)果仍是錯誤的:ZipFile 類型有一個名為 Count 的屬性,用于獲取該 zip 包中的文件數(shù)量。使用一個包含 95 萬個小文件的壓縮包進(jìn)行測試時,該屬性的取值卻只有 39866 ,也只能獲取到 39866 個文件。這說明該組件更坑,雖然沒報錯但給了錯誤的數(shù)據(jù):
含有 95 萬個文件的 zip 壓縮包
DotNetZip排名第三的軟件包是: DotNetZip ,也是一個比較流行的類庫。
DotNetZip : https://www.nuget.org/packages/DotNetZip/
他的用法和微軟自帶類庫的用法相似:
var fn = @"test.zip";using (var zip = ZipFile.Read(fn)){ foreach (var entry in zip.Entries) { Console.WriteLine("文件名:{0}", entry.FileName); using (var stream = entry.OpenReader()) using (var reader = new StreamReader(stream)) { var str = reader.ReadToEnd(); Console.WriteLine(str); } }}
經(jīng)測試,該類庫在處理上文提到的文件時沒有報錯,且獲得了正確的文件內(nèi)容。唯一的遺憾是 Read 方法打開文件時耗時較長。
總結(jié)在處理 zip 文件時,微軟自帶的類庫能滿足大多數(shù)需求。如果遇到報錯的情況,在確認(rèn)源文件正常的情況下可以更換其他類庫讀取。即使在成功讀取后,也需要核對讀取結(jié)果的正確性:沒有報錯,也不代表讀取到的數(shù)據(jù)就是正確的。
附錄測試文件下載地址:
ftp://opendata:kagar1n@ftp.euipo.europa.eu/Applicant/Full/APPLICANTS_20201109_0001.zip
本文發(fā)布于:2023-02-28 20:02:00,感謝您對本站的認(rèn)可!
本文鏈接:http://www.newhan.cn/zhishi/a/167765111877155.html
版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:壓縮文件打不開(壓縮文件打不開怎么解決).doc
本文 PDF 下載地址:壓縮文件打不開(壓縮文件打不開怎么解決).pdf
| 留言與評論(共有 0 條評論) |