超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

使用 C# 讀取 zip 壓縮包解壓文件的方法及注意事項(xiàng)

admin
2025年2月13日 17:37 本文熱度 825

 從 .NET Framework 4.5 版本開始,微軟為 .NET 類庫增加了一個(gè)名為 ZipFile 的類型。該類型在 System.IO.Compression 命名空間下,提供創(chuàng)建、解壓縮和打開 zip 存檔的靜態(tài)方法。若要在 .NET Framework 應(yīng)用中使用 ZipFile 類,必須添加對(duì)程序集 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);        }    }}

但是,有時(shí)候上述代碼會(huì)不好用。當(dāng)遇到一個(gè)較大的 zip 文件時(shí)可能會(huì)報(bào)錯(cuò):

Number of entries expected in End Of Central Directory does not correspond to number of entries in Central Directory.

關(guān)于該錯(cuò)誤,只能搜索到零星的答案,而且大部分都是從國(guó)外網(wǎng)站機(jī)翻的沒有任何參考價(jià)值。


SharpZipLib

在 NuGet 上以 zip 為關(guān)鍵詞搜索時(shí),排名第二的是一個(gè)名為 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 包時(shí),上述代碼沒有報(bào)錯(cuò),但結(jié)果仍是錯(cuò)誤的:ZipFile 類型有一個(gè)名為 Count 的屬性,用于獲取該 zip 包中的文件數(shù)量。使用一個(gè)包含 95 萬個(gè)小文件的壓縮包進(jìn)行測(cè)試時(shí),該屬性的取值卻只有 39866 ,也只能獲取到 39866 個(gè)文件。這說明該組件更坑,雖然沒報(bào)錯(cuò)但給了錯(cuò)誤的數(shù)據(jù):

含有 95 萬個(gè)文件的 zip 壓縮包。


DotNetZip

排名第三的軟件包是:DotNetZip ,也是一個(gè)比較流行的類庫。

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)測(cè)試,該類庫在處理上文提到的文件時(shí)沒有報(bào)錯(cuò),且獲得了正確的文件內(nèi)容。唯一的遺憾是 Read 方法打開文件時(shí)耗時(shí)較長(zhǎng)。


總結(jié)

在處理 zip 文件時(shí),微軟自帶的類庫能滿足大多數(shù)需求。如果遇到報(bào)錯(cuò)的情況,在確認(rèn)源文件正常的情況下可以更換其他類庫讀取。即使在成功讀取后,也需要核對(duì)讀取結(jié)果的正確性:沒有報(bào)錯(cuò),也不代表讀取到的數(shù)據(jù)就是正確的。

另外,為了加快顯示速度,可以將已經(jīng)讀取文件的信息存儲(chǔ)到數(shù)據(jù)庫中,就不需要對(duì)zip壓縮包文件再次臨時(shí)解壓讀取了。


該文章在 2025/2/13 17:37:09 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved