午夜视频在线观看区二区-午夜视频在线观看视频-午夜视频在线观看视频在线观看-午夜视频在线观看完整高清在线-午夜视频在线观看网站-午夜视频在线观看亚洲天堂

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

 從 .NET Framework 4.5 版本開始,微軟為 .NET 類庫增加了一個名為 ZipFile 的類型。該類型在 System.IO.Compression 命名空間下,提供創建、解壓縮和打開 zip 存檔的靜態方法。若要在 .NET Framework 應用中使用 ZipFile 類,必須添加對程序集 System.IO.Compression.FileSystem 的引用。

參考鏈接:

https://docs.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile?view=net-6.0

使用以下代碼讀取壓縮文件內容:

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);        }    }}

但是,有時候上述代碼會不好用。當遇到一個較大的 zip 文件時可能會報錯:

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

關于該錯誤,只能搜索到零星的答案,而且大部分都是從國外網站機翻的沒有任何參考價值。


SharpZipLib

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

含有 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);        }    }}

經測試,該類庫在處理上文提到的文件時沒有報錯,且獲得了正確的文件內容。唯一的遺憾是 Read 方法打開文件時耗時較長。


總結

在處理 zip 文件時,微軟自帶的類庫能滿足大多數需求。如果遇到報錯的情況,在確認源文件正常的情況下可以更換其他類庫讀取。即使在成功讀取后,也需要核對讀取結果的正確性:沒有報錯,也不代表讀取到的數據就是正確的。

另外,為了加快顯示速度,可以將已經讀取文件的信息存儲到數據庫中,就不需要對zip壓縮包文件再次臨時解壓讀取了。


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

主站蜘蛛池模板: 囯产免费久久久久久国产免费 | 国产精品无码毛片久久久 | 国产av无码专区亚洲av极速版 | 国产成人在线一 | 国产美日韩精品一区二区在线观看 | 国产无套内射久久久国产 | 国产无码精品视频 | 国产野外强奷系列在线播放 | 国产日韩成人内射视频 | 成人毛片免费看片 | 国产在线欧美日韩精品一区 | 99综合久久成人国产欧美 | 国产成人高清精品免费观看 | 国产欧美日本一区二区三区免费 | 国产精品观看在 | 精品人妻一卡二卡三卡 | 国产中文亚洲熟女日韩 | 国产极品在线观看视频 | 国产三级内射自拍 | 国产精品免费久久久久电影网 | 国产av午夜精品一区二区入口 | 国产无码av观看 | av在线播放黄 | 国产毛a片久久久久久无码 国产毛多水多高潮高清 | 69久久久a片无码国产精 | 国产精品好吊一区二区三 | 国产av亚洲精品ai换脸电影 | 国产在线高清伦片a | av中文字幕潮喷人妻系列 | 精品国产一区二区 | av无码最新在线播放网址 | 91大神久久亚洲 | 丰满人妻销魂娇喘呻吟 | 18禁动漫一区二区三区免费下 | 国产精品一区二区av在线观看 | 国产一区二区三区好 | av日韩欧美高清在线观看 | 成人欧美s视频在线观看 | 国产欧美综合在线观看第十 | 国产美女福利视频一区二区 | 国产丝袜美女一区二区三区 |