跳至頁尾內容
.NET 幫助

Sharpziplib C# 解壓縮 ZIP 檔案(開發者使用方法)

在當今資料管理至關重要的數位化環境中,擁有高效的壓縮和解壓縮工具至關重要。 在 .NET 生態系中, SharpZipLib就是這樣一款脫穎而出的工具。 在本文中,我們將深入探討 SharpZipLib,探索其功能、應用以及如何將其整合到您的 .NET 專案中。

SharpZipLib是什麼?

SharpZipLib是一個功能豐富的開源 .NET 壓縮函式庫,完全用 C# 寫。 它為各種壓縮格式提供全面支持,包括 ZIP、GZip 和 Tar。 SharpZipLib 由一個專注的社區開發,提供各種功能,可有效地壓縮和解壓縮檔案。

功能特性

1.支援多種壓縮格式: SharpZipLib 支援 ZIP、GZip 和 Tar 等流行的壓縮格式,滿足各種使用情境和需求。 2.基於流的操作:此庫對流進行操作,使開發人員能夠處理來自各種來源的數據,包括文件、內存流或網路流。 這種靈活性有助於將其無縫整合到應用程式的不同部分。 3.壓縮級別:開發人員可以根據自身需求,微調壓縮級別,以平衡壓縮比和處理速度。 4.密碼保護: SharpZipLib 允許建立受密碼保護的 ZIP 存檔,透過使用指定的密碼加密內容來確保資料安全。 5.錯誤處理與復原:強大的錯誤處理機制使開發人員能夠優雅地處理壓縮和解壓縮作業期間的異常。 此外,SharpZipLib 支援從損壞的存檔中恢復,從而提高了可靠性。

用例

1.檔案壓縮和歸檔: SharpZipLib 非常適合需要壓縮和歸檔文件的應用程序,例如備份實用程式、檔案管理工具或資料匯出功能。

  1. Web 服務和 API:處理檔案傳輸或資料交換的 Web 服務通常會受益於壓縮,從而減少頻寬使用。 SharpZipLib 可以無縫整合到此類服務中,以有效地壓縮傳出資料或解壓縮傳入有效載荷。 3.桌面應用程式:處理大型資料集或資源檔案的桌面應用程式可以利用 SharpZipLib 壓縮檔案以進行儲存或分發。 這對於軟體安裝程式或資料同步工具尤其有用。 4.資料備份和儲存:需要定期備份或以壓縮格式儲存資料的應用程式可以使用 SharpZipLib 自動執行備份過程並有效節省儲存空間。

SharpZipLib 的優勢

1.開源:作為一個開源程式庫,SharpZipLib 鼓勵協作和社群貢獻,確保持續改進並適應不斷變化的需求。 2.跨平台相容性: SharpZipLib 使用 C# 編寫,面向 .NET 框架,與包括 Windows、Linux 和 macOS 在內的各種平台相容,增強了其多功能性。 3.輕巧高效: SharpZipLib 的設計理念是輕巧高效,在提供高性能壓縮和解壓縮功能的同時,最大限度地減少資源消耗。 4.豐富的文件和支援:全面的文件和社群支援使開發人員在使用 SharpZipLib 時更容易整合和解決問題。

建立 C# Visual Studio 項目

  1. 開啟 Visual Studio,然後按一下"建立新專案"選項。
  2. 根據您的需求選擇合適的專案範本(例如,控制台應用程式、Windows 窗體應用程式)。

    Sharpziplib 提取 ZIP C#(開發人員的工作原理):圖 1 - 對於新項目,在 C# 中選擇"控制台應用程式"。

  3. 指定項目名稱和位置,然後按一下"下一步"。

    ![Sharpziplib 提取 ZIP C#(開發人員的工作原理):圖 2 - 透過指定專案名稱、位置和解決方案名稱來配置您的專案。 接下來,選擇 .NET Framework 並按一下"建立"。

  4. 從"附加資訊"中選擇最新的 .NET Framework。 點擊"創建"按鈕創建項目。

安裝過程

要將 SharpZipLib 整合到您的 .NET 專案中:

  1. Visual Studio IDE的 C# ConsoleApp 中,右鍵單擊解決方案資源管理器中的項目,然後選擇"管理 NuGet 套件..."
  2. 在 NuGet 套件管理器視窗中,搜尋"SharpZipLib"。

    Sharpziplib 提取 ZIP C#(開發人員的操作方法):圖 3 - 使用 NuGet 套件管理器的搜尋列搜尋"sharpziplib",然後選擇專案並點擊"安裝"按鈕,即可透過管理解決方案的 NuGet 套件來安裝 SharpZipLib。

  3. 從搜尋結果中選擇"SharpZipLib",然後點選"安裝"按鈕。
  4. NuGet 將自動下載並為您的專案添加必要的依賴項。

程式碼範例

以下是一個簡化的範例,示範如何使用 SharpZipLib 壓縮和解壓縮檔案:

using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;

namespace SharpZipLibExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\SourceDirectory";     // Source directory containing files to compress
            string zipFilePath = @"C:\OutputDirectory\compressed.zip"; // Output path for the compressed ZIP file

            // Compress files from the source directory
            CompressDirectory(sourceDirectory, zipFilePath);
            Console.WriteLine("Files compressed successfully.");

            string extractPath = @"C:\OutputDirectory\extracted"; // Path to extract the decompressed files

            // Decompress files from the ZIP archive
            Decompress(zipFilePath, extractPath);
            Console.WriteLine("Files decompressed successfully.");
        }

        // Method to compress all files in a directory to a ZIP file
        static void CompressDirectory(string sourceDirectory, string zipFilePath)
        {
            using (var zipOutputStream = new ZipOutputStream(File.Create(zipFilePath)))
            {
                zipOutputStream.SetLevel(5); // Set compression level (0-9), 5 as a mid-range

                // Recursively add files in the source directory to the ZIP file
                AddDirectoryFilesToZip(sourceDirectory, zipOutputStream);

                zipOutputStream.Finish();
                zipOutputStream.Close();
            }
        }

        // Method to add files from a directory to a ZIP output stream
        static void AddDirectoryFilesToZip(string sourceDirectory, ZipOutputStream zipOutputStream)
        {
            // Get list of files in the directory
            string[] files = Directory.GetFiles(sourceDirectory);

            foreach (string file in files)
            {
                var entry = new ZipEntry(Path.GetFileName(file)); // Create a new entry for each file
                zipOutputStream.PutNextEntry(entry);

                using (var fileStream = File.OpenRead(file))
                {
                    // Buffer for reading files
                    byte[] buffer = new byte[4096];
                    int sourceBytes;

                    // Read file and write to ZIP stream
                    while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        zipOutputStream.Write(buffer, 0, sourceBytes);
                    }
                }
            }

            // Handle subdirectories recursively
            string[] subdirectories = Directory.GetDirectories(sourceDirectory);
            foreach (string subdirectory in subdirectories)
            {
                AddDirectoryFilesToZip(subdirectory, zipOutputStream);
            }
        }

        // Method to decompress files from a ZIP file
        static void Decompress(string zipFilePath, string extractPath)
        {
            using (var zipInputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
            {
                ZipEntry entry;
                // Read entries from the ZIP archive
                while ((entry = zipInputStream.GetNextEntry()) != null)
                {
                    string entryPath = Path.Combine(extractPath, entry.Name);

                    // Process files
                    if (entry.IsFile)
                    {
                        string directoryName = Path.GetDirectoryName(entryPath);
                        if (!Directory.Exists(directoryName))
                            Directory.CreateDirectory(directoryName);

                        using (var fileStream = File.Create(entryPath))
                        {
                            // Buffer for reading entries
                            byte[] buffer = new byte[4096];
                            int bytesRead;
                            // Read from ZIP stream and write to file
                            while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                fileStream.Write(buffer, 0, bytesRead);
                            }
                        }
                    }
                    else if (entry.IsDirectory) // Process directories
                    {
                        Directory.CreateDirectory(entryPath);
                    }
                }
            }
        }
    }
}
using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;

namespace SharpZipLibExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\SourceDirectory";     // Source directory containing files to compress
            string zipFilePath = @"C:\OutputDirectory\compressed.zip"; // Output path for the compressed ZIP file

            // Compress files from the source directory
            CompressDirectory(sourceDirectory, zipFilePath);
            Console.WriteLine("Files compressed successfully.");

            string extractPath = @"C:\OutputDirectory\extracted"; // Path to extract the decompressed files

            // Decompress files from the ZIP archive
            Decompress(zipFilePath, extractPath);
            Console.WriteLine("Files decompressed successfully.");
        }

        // Method to compress all files in a directory to a ZIP file
        static void CompressDirectory(string sourceDirectory, string zipFilePath)
        {
            using (var zipOutputStream = new ZipOutputStream(File.Create(zipFilePath)))
            {
                zipOutputStream.SetLevel(5); // Set compression level (0-9), 5 as a mid-range

                // Recursively add files in the source directory to the ZIP file
                AddDirectoryFilesToZip(sourceDirectory, zipOutputStream);

                zipOutputStream.Finish();
                zipOutputStream.Close();
            }
        }

        // Method to add files from a directory to a ZIP output stream
        static void AddDirectoryFilesToZip(string sourceDirectory, ZipOutputStream zipOutputStream)
        {
            // Get list of files in the directory
            string[] files = Directory.GetFiles(sourceDirectory);

            foreach (string file in files)
            {
                var entry = new ZipEntry(Path.GetFileName(file)); // Create a new entry for each file
                zipOutputStream.PutNextEntry(entry);

                using (var fileStream = File.OpenRead(file))
                {
                    // Buffer for reading files
                    byte[] buffer = new byte[4096];
                    int sourceBytes;

                    // Read file and write to ZIP stream
                    while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        zipOutputStream.Write(buffer, 0, sourceBytes);
                    }
                }
            }

            // Handle subdirectories recursively
            string[] subdirectories = Directory.GetDirectories(sourceDirectory);
            foreach (string subdirectory in subdirectories)
            {
                AddDirectoryFilesToZip(subdirectory, zipOutputStream);
            }
        }

        // Method to decompress files from a ZIP file
        static void Decompress(string zipFilePath, string extractPath)
        {
            using (var zipInputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
            {
                ZipEntry entry;
                // Read entries from the ZIP archive
                while ((entry = zipInputStream.GetNextEntry()) != null)
                {
                    string entryPath = Path.Combine(extractPath, entry.Name);

                    // Process files
                    if (entry.IsFile)
                    {
                        string directoryName = Path.GetDirectoryName(entryPath);
                        if (!Directory.Exists(directoryName))
                            Directory.CreateDirectory(directoryName);

                        using (var fileStream = File.Create(entryPath))
                        {
                            // Buffer for reading entries
                            byte[] buffer = new byte[4096];
                            int bytesRead;
                            // Read from ZIP stream and write to file
                            while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                fileStream.Write(buffer, 0, bytesRead);
                            }
                        }
                    }
                    else if (entry.IsDirectory) // Process directories
                    {
                        Directory.CreateDirectory(entryPath);
                    }
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

SharpZipLib 長期以來一直是 .NET 語言開發社群的必備工具,為處理 ZIP、GZip、Tar 和 BZip2 等壓縮檔案提供了必要的功能。然而,隨著技術的進步和開發人員尋求更高級的解決方案,SharpZipLib 的一些限制也逐漸顯現出來。

SharpZipLib 的局限性

1.複雜性: SharpZipLib 的 API 可能很繁瑣冗長,需要開發人員編寫冗長的程式碼來執行創建或提取 ZIP 歸檔等簡單任務。 2.缺乏現代功能: SharpZipLib 缺乏對現代 .NET 功能和平台的支持,使其不太適合當代開發環境。 3.文件有限:雖然 SharpZipLib 已經存在很長時間了,但其文件通常很少且過時,這使得開發人員難以入門或解決問題。 4.性能: SharpZipLib 的性能可能並不總是能滿足開發人員的期望,尤其是在處理大型或複雜的歸檔文件時。

IronZIP:彌合差距

IronZIP 文檔,由Iron Software 開發,概述,是用於在 .NET 應用程式中管理 ZIP 存檔的現代化高效解決方案。 憑藉其直覺的 API,開發人員可以輕鬆建立、讀取和操作 ZIP 檔案。 IronZIP 提供可自訂壓縮等級和密碼保護等進階功能,確保靈活性和資料安全性。 IronZIP 與最新的 .NET 版本相容,並針對效能進行了最佳化,可輕鬆有效地簡化歸檔管理任務。

Sharpziplib C# 解壓縮 ZIP 檔案(開發者使用方法):圖 4 - IronZIP for .NET:C# Zip 檔案函式庫

IronZIP Features是一款強大且現代的解決方案,可解決 SharpZipLib 的不足之處。 以下是IronZIP如何填補這些空白的方式:

1.進階 API: IronZIP 提供直覺且對開發者友善的 API,簡化歸檔管理任務。 借助 IronZIP,開發人員只需幾行程式碼即可完成複雜的操作,從而減少開發時間和精力。 2.完全支援 .NET: IronZIP 完全支援最新的 .NET 版本,包括 .NET Core、.NET Standard 和 .NET Framework,確保與現代開發環境和平台相容。 3.全面的文件: IronZIP 附帶全面的文件和範例,使開發人員能夠快速掌握其特性和功能。 詳盡的文件有助於簡化學習曲線,並促進快速融入專案。 4.壓縮等級控制: IronZIP 為開發者提供了對壓縮等級的控制,讓他們可以根據自身需求調整壓縮等級。 此功能使開發人員能夠在檔案大小減小和壓縮速度之間取得平衡。 5.密碼保護: IronZIP 支援對 ZIP 壓縮檔案進行密碼保護,進而增強敏感資料的安全性。 開發人員可以輕鬆地使用傳統密碼、AES128 和 AES256 密碼對 ZIP 檔案進行加密,從而確保只有授權使用者才能存取已存檔的內容。 6.性能優化: IronZIP 針對性能進行了優化,與 SharpZipLib 相比,可提供更快的壓縮和提取速度。 這種優化確保開發人員能夠有效地處理大量數據,而不會影響效能。

請查閱IronZIP 文檔,以了解更多關於 IronZIP 入門的資訊。 IronZIP程式碼範例可協助您輕鬆上手。

IronZIP 安裝

以下是將 XDocument 與 IronPDF 整合的步驟:

  • 開啟Visual Studio IDE或您喜歡的 IDE。
  • 從"工具"功能表中,導覽至 NuGet 套件管理器控制台。
  • 執行以下指令安裝 IronZIP 軟體包:

    Install-Package IronPdf

或者,您也可以透過 NuGet 解決方案套件管理器進行安裝。

  • 從 NuGet 瀏覽標籤中選擇 IronZIP,然後按一下安裝:

Sharpziplib 擷取 ZIP C#(開發人員的工作原理):圖 5 - 使用 NuGet 套件管理員的搜尋列中搜尋"IronZip",然後選擇專案並點擊"安裝"按鈕,即可透過"管理解決方案的 NuGet 套件"安裝 IronZIP。

程式碼範例

以下原始程式碼展示了 IronZIP 如何輕鬆且有效率地建立 ZIP 文件,只需幾行程式碼即可完成。 在這裡,您可以透過提供指定資料夾中的檔案名,將多個檔案新增至受密碼保護的 ZIP 檔案中。 建立IronZipArchive物件時,您也可以指定壓縮等級以減少輸出檔案的空間大小。

using IronZip;
using IronZip.Enum;

class Program
{
    static void Main()
    {
        // Create an empty ZIP with the highest compression
        using (var archive = new IronZipArchive(9))
        {
            // Password protect the ZIP (Support AES128 & AES256)
            archive.SetPassword("P@ssw0rd", EncryptionMethods.Traditional);
            archive.AddArchiveEntry("./assets/file1.txt");
            archive.AddArchiveEntry("./assets/file2.txt");
            // Export the ZIP
            archive.SaveAs("output.zip");
        }
    }
}
using IronZip;
using IronZip.Enum;

class Program
{
    static void Main()
    {
        // Create an empty ZIP with the highest compression
        using (var archive = new IronZipArchive(9))
        {
            // Password protect the ZIP (Support AES128 & AES256)
            archive.SetPassword("P@ssw0rd", EncryptionMethods.Traditional);
            archive.AddArchiveEntry("./assets/file1.txt");
            archive.AddArchiveEntry("./assets/file2.txt");
            // Export the ZIP
            archive.SaveAs("output.zip");
        }
    }
}
$vbLabelText   $csharpLabel

輸出壓縮檔案

Sharpziplib 擷取 ZIP C#(開發人員的工作原理):圖 6 - 輸出:使用 IronZIP 建立的受密碼保護的 Zip 檔案。

結論

SharpZipLib 概述:SharpZipLib是一款功能強大的 .NET 壓縮程式庫,提供豐富的特性和功能,可高效地處理壓縮檔案。 無論是壓縮資料以進行儲存、歸檔文件,還是優化 Web 服務中的頻寬使用,SharpZipLib 都提供了必要的工具來簡化壓縮和解壓縮操作。 SharpZipLib 具有開源特性、跨平台相容性和強大的功能,是 .NET 應用程式中開發人員尋求可靠壓縮解決方案的首選。

雖然 SharpZipLib 一直是 .NET 應用程式中處理壓縮檔案的可靠選擇,但在當今的開發環境中,它的限制變得越來越明顯。 Explore IronZIP API 的出現填補了 SharpZipLib 留下的空白,提供了一個現代化且功能豐富的替代方案,優先考慮易用性、性能和兼容性。 透過 IronZIP,開發人員可以解鎖歸檔管理的新可能性,並透過進階功能和直覺的 API 簡化其開發工作流程。

IronZIP 提供免費試用許可概述。 從IronZIP 下載中心下載庫並試用。

常見問題解答

如何使用 SharpZipLib 在 C# 中提取 ZIP 檔案?

要在 C# 中使用 SharpZipLib 提取 ZIP 文件,可以使用FastZip類,該類提供了用於提取 ZIP 壓縮文件的方法。您可以初始化FastZip的新實例,然後使用ExtractZip方法,並指定來源路徑和目標路徑。

SharpZipLib for .NET 有哪些共同特色?

SharpZipLib 支援多種壓縮格式,例如 ZIP、GZip 和 Tar。它支援基於流的操作、可調節的壓縮級別,並包含用於保護 ZIP 壓縮檔案的密碼保護功能。

如何提高.NET應用程式的壓縮效能?

IronZIP 為壓縮任務提供最佳化的效能。它提供直覺的 API、可自訂的壓縮級別,並支援最新的 .NET 版本,從而能夠有效地管理 ZIP 檔案。

使用像 SharpZipLib 這樣的老舊壓縮程式庫會面臨哪些挑戰?

一些挑戰包括繁瑣的 API、缺乏現代功能、文件有限以及處理大型歸檔文件時可能出現的效能問題。

IronZIP 如何提高 .NET 壓縮任務的工作流程效率?

IronZIP 透過提供可自訂壓縮、密碼保護和直覺的 API 等進階功能,顯著提升工作效率。此外,它還提供全面的文檔,並支援最新的 .NET 版本,以實現無縫整合。

我可以使用 C# 中的 SharpZipLib 庫為 ZIP 壓縮檔案設定密碼保護嗎?

是的,SharpZipLib 允許您使用密碼保護 ZIP 壓縮檔案。您可以使用ZipOutputStream並設定Password屬性來為 ZIP 檔案指定密碼。

IronZIP 有哪些方面使其成為 SharpZipLib 的現代替代方案?

IronZIP 提供了一種現代化的替代方案,其特點包括直覺的 API、全面的文檔、對最新 .NET 版本的全面支援、密碼保護和最佳化的效能。

如何在我的.NET專案中安裝SharpZipLib?

您可以透過 Visual Studio 中的 NuGet 套件管理器安裝 SharpZipLib。在 NuGet 套件管理器中搜尋「SharpZipLib」並將其安裝,即可將其整合到您的 .NET 專案中。

與傳統函式庫相比,使用 IronZIP 有哪些優勢?

IronZIP 具有直覺的 API、增強的效能、對現代 .NET 框架的支援、可自訂的壓縮等級以及對 ZIP 檔案強大的密碼保護等優勢。

哪裡可以找到 SharpZipLib 的資源和文件?

SharpZipLib 的官方 NuGet 頁面和 GitHub 儲存庫中提供了相關文件和資源,其中包含整合和使用指南及範例。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。