在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在當今數位環境中,數據管理至關重要,擁有高效的壓縮和解壓縮工具是至關重要的。在 .NET 生態系統中,一個突出的工具是 SharpZipLib. 在本文中,我們將深入探討SharpZipLib,探索其特性、應用,以及如何整合到您的.NET專案中。
SharpZipLib 是一個功能豐富的開源壓縮庫,適用於 .NET,完全由 C# 編寫。它提供對各種壓縮格式的全面支持,包括 ZIP、GZip 和 Tar。由專業社區開發,SharpZipLib 提供多種功能來高效壓縮和解壓文件。
支援多種壓縮格式:SharpZipLib 支援流行的壓縮格式,如 ZIP、GZip 和 Tar,滿足多樣化的使用情境和需求。
基於流的操作:該庫操作於流上,使開發者能夠處理來自各種來源的數據,包括文件、內存流或網絡流。這種靈活性便於無縫整合到應用程序的不同部分。
壓縮等級:開發者可以微調壓縮等級,以在壓縮比和處理速度之間取得平衡,根據他們的具體需求進行調整。
密碼保護:SharpZipLib 允許創建密碼保護的 ZIP 存檔,通過指定的密碼加密內容以確保數據安全。
文件壓縮與存檔: SharpZipLib 對於需要壓縮和存檔文件的應用程式非常理想,例如備份工具、文件管理工具或數據匯出功能。
網絡服務和 API: 處理文件傳輸或數據交換的網絡服務通常受益於壓縮,以減少頻寬使用率。SharpZipLib 可以無縫整合到這些服務中,以有效地壓縮發出的數據或解壓接收的負載。
桌面應用程式: 處理大型數據集或資源文件的桌面應用程式可以利用 SharpZipLib 來壓縮文件以便存儲或分發。這對於軟件安裝程序或數據同步工具特別有用。
開源: 作為開源庫,SharpZipLib 鼓勵協作和社群貢獻,確保持續改進並適應不斷發展的需求。
跨平台相容性: SharpZipLib 是用 C# 編寫並針對 .NET 框架,與多個平台相容,包括 Windows、Linux 和 macOS,提高了其多樣性。
輕量且高效: SharpZipLib 設計輕量且高效,最大程度地減少資源消耗,同時提供高性能的壓縮和解壓縮能力。
打開 Visual Studio 並點擊「建立新專案」選項。
根據需求選擇適當的專案範本。 (例如,控制台應用程式,Windows Forms 應用程式).
指定專案名稱和位置,然後點擊“下一步”。
要將SharpZipLib整合到您的 .NET 項目中:
在您的 Visual Studio C# 主控台應用程式中,在 Solution Explorer 中右鍵點擊你的專案並選擇 "管理 NuGet 套件..."
在 NuGet 套件管理器窗口中,搜索 "SharpZipLib"。
從搜尋結果中選擇「SharpZipLib」,然後點擊「安裝」按鈕。
以下是一個簡化的示例,演示如何使用 SharpZipLib 壓縮和解壓縮文件:
using ICSharpCode.SharpZipLib.Zip;
using System;
using System.IO;
namespace SharpZipLibExample
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\SourceDirectory";
string zipFilePath = @"C:\OutputDirectory\compressed.zip";
// Compress files
CompressDirectory(sourceDirectory, zipFilePath);
Console.WriteLine("Files compressed successfully.");
string extractPath = @"C:\OutputDirectory\extracted";
// Decompress files
Decompress(zipFilePath, extractPath);
Console.WriteLine("Files decompressed successfully.");
}
static void CompressDirectory(string sourceDirectory, string zipFilePath)
{
using (var zipOutputStream = new ZipOutputStream(File.Create(zipFilePath)))
{
zipOutputStream.SetLevel(5); // Compression level (0-9)
// Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream);
zipOutputStream.Finish();
zipOutputStream.Close();
}
}
static void AddDirectoryFilesToZip(string sourceDirectory, ZipOutputStream zipOutputStream)
{
string[] files = Directory.GetFiles(sourceDirectory);
foreach (string file in files)
{
var entry = new ZipEntry(Path.GetFileName(file));
zipOutputStream.PutNextEntry(entry);
using (var fileStream = File.OpenRead(file))
{
byte[] buffer = new byte[4096];
int sourceBytes;
while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
zipOutputStream.Write(buffer, 0, sourceBytes);
}
}
}
string[] subdirectories = Directory.GetDirectories(sourceDirectory);
foreach (string subdirectory in subdirectories)
{
AddDirectoryFilesToZip(subdirectory, zipOutputStream);
}
}
static void Decompress(string zipFilePath, string extractPath)
{
using (var zipInputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry entry;
while ((entry = zipInputStream.GetNextEntry()) != null)
{
string entryPath = Path.Combine(extractPath, entry.Name);
if (entry.IsFile)
{
string directoryName = Path.GetDirectoryName(entryPath);
if (!Directory.Exists(directoryName))
Directory.CreateDirectory(directoryName);
using (var fileStream = File.Create(entryPath))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, bytesRead);
}
}
}
else if (entry.IsDirectory)
{
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";
string zipFilePath = @"C:\OutputDirectory\compressed.zip";
// Compress files
CompressDirectory(sourceDirectory, zipFilePath);
Console.WriteLine("Files compressed successfully.");
string extractPath = @"C:\OutputDirectory\extracted";
// Decompress files
Decompress(zipFilePath, extractPath);
Console.WriteLine("Files decompressed successfully.");
}
static void CompressDirectory(string sourceDirectory, string zipFilePath)
{
using (var zipOutputStream = new ZipOutputStream(File.Create(zipFilePath)))
{
zipOutputStream.SetLevel(5); // Compression level (0-9)
// Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream);
zipOutputStream.Finish();
zipOutputStream.Close();
}
}
static void AddDirectoryFilesToZip(string sourceDirectory, ZipOutputStream zipOutputStream)
{
string[] files = Directory.GetFiles(sourceDirectory);
foreach (string file in files)
{
var entry = new ZipEntry(Path.GetFileName(file));
zipOutputStream.PutNextEntry(entry);
using (var fileStream = File.OpenRead(file))
{
byte[] buffer = new byte[4096];
int sourceBytes;
while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
zipOutputStream.Write(buffer, 0, sourceBytes);
}
}
}
string[] subdirectories = Directory.GetDirectories(sourceDirectory);
foreach (string subdirectory in subdirectories)
{
AddDirectoryFilesToZip(subdirectory, zipOutputStream);
}
}
static void Decompress(string zipFilePath, string extractPath)
{
using (var zipInputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry entry;
while ((entry = zipInputStream.GetNextEntry()) != null)
{
string entryPath = Path.Combine(extractPath, entry.Name);
if (entry.IsFile)
{
string directoryName = Path.GetDirectoryName(entryPath);
if (!Directory.Exists(directoryName))
Directory.CreateDirectory(directoryName);
using (var fileStream = File.Create(entryPath))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, bytesRead);
}
}
}
else if (entry.IsDirectory)
{
Directory.CreateDirectory(entryPath);
}
}
}
}
}
}
Imports ICSharpCode.SharpZipLib.Zip
Imports System
Imports System.IO
Namespace SharpZipLibExample
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim sourceDirectory As String = "C:\SourceDirectory"
Dim zipFilePath As String = "C:\OutputDirectory\compressed.zip"
' Compress files
CompressDirectory(sourceDirectory, zipFilePath)
Console.WriteLine("Files compressed successfully.")
Dim extractPath As String = "C:\OutputDirectory\extracted"
' Decompress files
Decompress(zipFilePath, extractPath)
Console.WriteLine("Files decompressed successfully.")
End Sub
Private Shared Sub CompressDirectory(ByVal sourceDirectory As String, ByVal zipFilePath As String)
Using zipOutputStream As New ZipOutputStream(File.Create(zipFilePath))
zipOutputStream.SetLevel(5) ' Compression level (0-9)
' Recursively add files in the source directory to the ZIP file
AddDirectoryFilesToZip(sourceDirectory, zipOutputStream)
zipOutputStream.Finish()
zipOutputStream.Close()
End Using
End Sub
Private Shared Sub AddDirectoryFilesToZip(ByVal sourceDirectory As String, ByVal zipOutputStream As ZipOutputStream)
Dim files() As String = Directory.GetFiles(sourceDirectory)
For Each file As String In files
Dim entry = New ZipEntry(Path.GetFileName(file))
zipOutputStream.PutNextEntry(entry)
Using fileStream = System.IO.File.OpenRead(file)
Dim buffer(4095) As Byte
Dim sourceBytes As Integer
sourceBytes = fileStream.Read(buffer, 0, buffer.Length)
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: while ((sourceBytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
Do While sourceBytes > 0
zipOutputStream.Write(buffer, 0, sourceBytes)
sourceBytes = fileStream.Read(buffer, 0, buffer.Length)
Loop
End Using
Next file
Dim subdirectories() As String = Directory.GetDirectories(sourceDirectory)
For Each subdirectory As String In subdirectories
AddDirectoryFilesToZip(subdirectory, zipOutputStream)
Next subdirectory
End Sub
Private Shared Sub Decompress(ByVal zipFilePath As String, ByVal extractPath As String)
Using zipInputStream As New ZipInputStream(File.OpenRead(zipFilePath))
Dim entry As ZipEntry
entry = zipInputStream.GetNextEntry()
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: while ((entry = zipInputStream.GetNextEntry()) != null)
Do While entry IsNot Nothing
Dim entryPath As String = Path.Combine(extractPath, entry.Name)
If entry.IsFile Then
Dim directoryName As String = Path.GetDirectoryName(entryPath)
If Not Directory.Exists(directoryName) Then
Directory.CreateDirectory(directoryName)
End If
Using fileStream = File.Create(entryPath)
Dim buffer(4095) As Byte
Dim bytesRead As Integer
bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: while ((bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)) > 0)
Do While bytesRead > 0
fileStream.Write(buffer, 0, bytesRead)
bytesRead = zipInputStream.Read(buffer, 0, buffer.Length)
Loop
End Using
ElseIf entry.IsDirectory Then
Directory.CreateDirectory(entryPath)
End If
entry = zipInputStream.GetNextEntry()
Loop
End Using
End Sub
End Class
End Namespace
SharpZipLib 長期以來一直是 .NET 語言開發社群中的主力,提供處理壓縮檔案(如 ZIP、GZip、Tar 和 BZip2)所需的基本功能。然而,隨著技術的不斷演進以及開發者尋求更先進的解決方案,SharpZipLib 的某些限制變得顯而易見。
複雜性:SharpZipLib 的 API 可能過於繁瑣,需要開發者撰寫冗長的代碼來執行簡單的任務,例如創建或提取 ZIP 壓縮檔。
缺乏現代功能:SharpZipLib 缺乏對現代 .NET 功能和平台的支援,因此不太適合當前的開發環境。
文件有限:雖然 SharpZipLib 已經存在很長時間,但其文件經常稀少且過時,使得開發者難以上手或解決問題。
IronZIP由...開發 Iron Software,是一個現代且高效的解決方案,用於在 .NET 應用程式中管理 ZIP 檔案。通過其直觀的 API,開發人員可以輕鬆建立、讀取和操作 ZIP 檔案。IronZIP 提供進階功能,例如可自定義的壓縮等級和密碼保護,確保了靈活性和資料安全性。兼容最新的 .NET 版本並針對性能進行了優化,IronZIP 以輕鬆且高效的方式簡化了檔案管理任務。
IronZIP 以穩健且現代的解決方案,解決了SharpZipLib的不足之處。IronZIP是如何填補這些空白的:
先進的API:IronZIP提供直觀且對開發者友好的API,簡化了檔案壓縮管理任務。使用IronZIP,開發者只需幾行代碼即可完成複雜操作,減少了開發時間和精力。
完整的.NET支持:IronZIP全面支持最新的.NET版本,包括.NET Core、.NET Standard和.NET Framework,確保與現代開發環境和平台的兼容性。
詳盡的文件說明:IronZIP附帶詳盡的文件說明和示例,使開發者能快速掌握其功能和能力。豐富的文件說明有助於平滑學習曲線,便於快速融入專案。
壓縮級別控制:IronZIP為開發者提供了對壓縮級別的控制,允許他們根據需求調整壓縮級別。此功能使開發者能夠在減少檔案大小和壓縮速度之間取得平衡。
密碼保護:IronZIP支持ZIP壓縮檔案的密碼保護,提升敏感數據的安全性。開發者可以輕鬆地使用傳統的、AES128和AES256密碼來加密ZIP壓縮檔案,確保只有授權用戶可以訪問壓縮檔案的內容。
它還提供 文檔 如何開始使用IronZIP的頁面。隨時可用 代碼範例 幫助您輕鬆上手。
以下是將 XDocument 與 IronPDF 整合的步驟:
從工具選單,導航到NuGet套件管理器主控台。
:ProductInstall
以下源代碼顯示了 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");
}
}
}
Imports IronZip
Imports IronZip.Enum
Friend Class Program
Shared Sub Main()
' Create an empty ZIP with the highest compression
Using 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")
End Using
End Sub
End Class
SharpZipLib 成為 .NET 的強大壓縮庫,提供一套豐富的功能和能力來高效處理壓縮文件。無論是為存儲而壓縮數據、歸檔文件,還是優化網絡服務中的帶寬使用,SharpZipLib 都提供了必要的工具來簡化壓縮和解壓操作。憑藉其開源特性、跨平台兼容性和強大的功能性,SharpZipLib 一直是尋求可靠壓縮解決方案的開發人員的首選。
雖然 SharpZipLib 一直是 .NET 應用程序中處理壓縮檔案的可靠選擇,但在當今的開發環境中,其局限性越來越明顯。 IronZIP 填補SharpZipLib留下的缺口,提供一個現代且功能豐富的替代方案,優先考慮易用性、性能和兼容性。使用IronZIP,開發者可以在檔案管理方面開啟新的可能性,並通過先進的功能和直觀的操作簡化他們的開發流程。 API鉄ZIP 提供一个 免費試用 頁面。從 這 連結並試試看。