我們經常遇到多個 ZIP 壓縮包被封裝在另一個 ZIP 中的場景。在這種情況下,首先,您必須解壓縮父 ZIP,然後一個一個解壓縮嵌套的存檔。為了讓您更輕鬆,在本文中,我們將演示如何在不編寫複雜代碼的情況下在 C# .NET 中提取嵌套的 ZIP 存檔。
用於提取嵌套 ZIP 存檔的 C# .NET API
要解壓縮嵌套的 ZIP 存檔,我們將使用 Aspose.ZIP for .NET。 API 旨在從 .NET 應用程序中執行歸檔操作。它允許您無縫地創建和操作流行的存檔格式。您可以 下載 API 的 DLL 或使用 NuGet 安裝它。
PM> Install-Package Aspose.Zip
在 C# 中提取嵌套的 ZIP 檔案
為了演示嵌套 ZIP 檔案的提取,我們創建了以下包含 3 個條目的 ZIP 文件。
我們將提取每個嵌套的 ZIP 存檔並將其內容保存在單獨的文件夾中。以下是在 C# 中提取嵌套 ZIP 存檔的步驟。
- 首先,創建一個 FileStream 對象來加載 ZIP 文件。
- 然後,使用 Archive 類加載 ZIP 文件。
- 遍歷 Archive.Entries 集合中的每個 ArchiveEntry。
- 過濾集合中的 ZIP 檔案,並為每個檔案執行以下步驟:
- 創建一個 MemoryStream 對象並使用 ArchiveEntry.Open().CopyTo(Stream) 方法將存檔條目複製到其中。
- 創建 Archive 類的實例以加載嵌套存檔。
- 最後,使用 Archive.ExtractToDirectory(string) 方法將存檔提取到文件夾中。
以下代碼示例顯示瞭如何在 C# .NET 中解壓縮嵌套的 ZIP 存檔。
// 在文件流中打開 ZIP 文件
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
// 使用 Archive 類加載 ZIP 文件
using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
{
// 訪問 ZIP 存檔中的每個條目
foreach(ArchiveEntry entry in archive.Entries)
{
if(entry.Name.ToLower().Contains(".zip"))
{
// 為嵌套存檔創建內存流
MemoryStream nestedArchiveStream = new MemoryStream();
// 將存檔複製到內存流
entry.Open().CopyTo(nestedArchiveStream);
// 從內存流加載嵌套存檔
using (var nestedArchive = new Archive(nestedArchiveStream))
{
// 將存檔提取到磁盤。
nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
}
}
}
}
}
以下是提取的 ZIP 檔案的屏幕截圖。
獲取免費的 API 許可證
您可以獲得免費的臨時許可證,以在沒有評估限制的情況下使用 Aspose.ZIP for .NET。
結論
在本文中,您學習瞭如何在 C# 中提取嵌套的 ZIP 存檔。分步指南和代碼示例演示瞭如何將每個嵌套存檔解壓縮到單獨的文件夾中。此外,您可以訪問 文檔 來探索 Aspose.ZIP for .NET 的其他功能。此外,您可以通過我們的 論壇 提問。