AIDE .NET

Sharpziplib Extraire ZIP C# (Comment ça marche pour les développeurs)

Dans le paysage numérique actuel, où la gestion des données est primordiale, il est essentiel de disposer d'outils efficaces de compression et de décompression. Un outil de ce type qui se distingue dans l'écosystème .NET est SharpZipLib. Dans cet article, nous allons nous pencher sur SharpZipLib, en explorant ses caractéristiques, ses applications et la manière de l'intégrer dans vos projets .NET.

Qu'est-ce que SharpZipLib ?

SharpZipLib est une bibliothèque de compression open-source riche en fonctionnalités pour .NET, entièrement écrite en C#. Il offre une prise en charge complète de divers formats de compression, notamment ZIP, GZip et Tar. Développé par une communauté dévouée, SharpZipLib offre un large éventail de fonctionnalités pour compresser et décompresser efficacement les fichiers.

Caractéristiques et capacités

  1. Support de plusieurs formats de compression : SharpZipLib prend en charge des formats de compression populaires tels que ZIP, GZip et Tar, répondant à des cas d'utilisation et des exigences diversifiés.

  2. Opérations Basées sur Flux : La bibliothèque fonctionne sur des flux, permettant aux développeurs de travailler avec des données provenant de diverses sources, y compris des fichiers, des flux en mémoire ou des flux réseau. Cette flexibilité facilite l'intégration transparente dans les différentes parties d'une application.

  3. Niveaux de Compression : Les développeurs peuvent ajuster les niveaux de compression pour équilibrer le ratio de compression et la vitesse de traitement, en fonction de leurs besoins spécifiques.

  4. Protection par mot de passe : SharpZipLib permet la création d'archives ZIP protégées par mot de passe, garantissant la sécurité des données en cryptant le contenu avec un mot de passe spécifié.

  5. Gestion et récupération des erreurs : Des mécanismes de gestion des erreurs robustes permettent aux développeurs de gérer avec élégance les exceptions lors des opérations de compression et de décompression. En outre, SharpZipLib prend en charge la récupération d'archives corrompues, ce qui améliore la fiabilité.

Cas d'utilisation

  1. Compression et archivage de fichiers : SharpZipLib est idéal pour les applications nécessitant la compression et l'archivage de fichiers, telles que les utilitaires de sauvegarde, les outils de gestion de fichiers ou les fonctionnalités d'exportation de données.

  2. Services Web et APIs : Les services web traitant des transferts de fichiers ou des échanges de données bénéficient souvent de la compression pour réduire l'utilisation de la bande passante. SharpZipLib peut être intégré de manière transparente dans de tels services pour compresser les données sortantes ou décompresser les charges utiles entrantes de manière efficace.

  3. Applications de bureau : Les applications de bureau traitant de grands ensembles de données ou de fichiers de ressources peuvent utiliser SharpZipLib pour compresser les fichiers pour le stockage ou la distribution. Ceci est particulièrement utile pour les installateurs de logiciels ou les outils de synchronisation de données.

  4. Sauvegarde et stockage des données : Les applications nécessitant des sauvegardes périodiques ou le stockage de données au format compressé peuvent automatiser le processus de sauvegarde et économiser efficacement de l'espace de stockage en utilisant SharpZipLib.

Avantages de SharpZipLib

  1. Open Source : En tant que bibliothèque open-source, SharpZipLib encourage la collaboration et les contributions de la communauté, garantissant une amélioration continue et une adaptabilité aux besoins évolutifs.

  2. Compatibilité multiplateforme : Écrit en C# et ciblant le framework .NET, SharpZipLib est compatible avec diverses plateformes, y compris Windows, Linux et macOS, ce qui renforce sa polyvalence.

  3. Léger et efficace : SharpZipLib est conçu pour être léger et efficace, minimisant la consommation de ressources tout en offrant des capacités de compression et de décompression haute performance.

  4. Documentation étendue et support : Une documentation exhaustive et un support communautaire facilitent l'intégration et la résolution de problèmes pour les développeurs utilisant SharpZipLib.

Créer C# ; Projet Visual Studio

  1. Ouvrez Visual Studio et cliquez sur l'option "Créer un nouveau projet".

  2. Choisissez le modèle de projet approprié en fonction de vos besoins (par exemple, Application Console, Application Windows Forms).

    Sharpziplib Extract ZIP C# (Comment cela fonctionne pour les développeurs) : Figure 1 - Pour le nouveau projet, sélectionnez une Application Console en C#.

  3. Spécifiez le nom et l'emplacement du projet, puis cliquez sur "Suivant".

    Sharpziplib Extract ZIP C# (Comment ça fonctionne pour les développeurs) : Figure 2 - Configurez votre projet en spécifiant le nom du projet, l'emplacement et le nom de la solution. Ensuite, sélectionnez le .NET Framework et cliquez sur Créer.

  4. Dans la rubrique Informations complémentaires, sélectionnez le dernier Framework .NET. Cliquez sur "Créer" pour créer le projet.

Processus d'installation

Pour intégrer SharpZipLib dans votre projet .NET :

  1. Dans votre Visual Studio IDE C# ConsoleApp, faites un clic droit sur votre projet dans l'Explorateur de solutions et sélectionnez "Gérer les packages NuGet..."

  2. Dans la fenêtre du gestionnaire de paquets NuGet, recherchez "SharpZipLib".

    Sharpziplib Extraire ZIP C# (Comment ça fonctionne pour les développeurs) : Figure 3 - Installez SharpZipLib en utilisant le gestionnaire de paquet NuGet en recherchant sharpziplib dans la barre de recherche du gestionnaire de paquets NuGet, puis sélectionnez le projet et cliquez sur le bouton Installer.

  3. Sélectionnez "SharpZipLib" dans les résultats de la recherche et cliquez sur le bouton "Installer".

  4. NuGet téléchargera et ajoutera automatiquement les dépendances nécessaires à votre projet.

Exemple de code

Voici un exemple simplifié montrant comment utiliser SharpZipLib pour compresser et décompresser des fichiers :

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
$vbLabelText   $csharpLabel

SharpZipLib est depuis longtemps un élément essentiel de la communauté de développement du langage .NET, fournissant des fonctionnalités essentielles pour travailler avec des archives compressées telles que ZIP, GZip, Tar, et BZip2. Cependant, à mesure que la technologie évolue et que les développeurs recherchent des solutions plus avancées, certaines limites de SharpZipLib sont devenues évidentes.

Limites de SharpZipLib

  1. Complexité : L'API de SharpZipLib peut être lourde et verbeuse, obligeant les développeurs à écrire un code long pour effectuer des tâches simples telles que la création ou l'extraction d'archives ZIP.

  2. Manque de fonctionnalités modernes : SharpZipLib ne supporte pas les fonctionnalités et plateformes modernes de .NET, le rendant moins adapté aux environnements de développement contemporains.

  3. Documentation limitée : Bien que SharpZipLib existe depuis longtemps, sa documentation est souvent rare et obsolète, ce qui rend difficile pour les développeurs de commencer ou de résoudre des problèmes.

  4. Performance : La performance de SharpZipLib peut ne pas toujours répondre aux attentes des développeurs, surtout lorsqu'il s'agit de gérer des archives volumineuses ou complexes.

IronZIP : combler le fossé

Documentation d'IronZIP, développée par Aperçu d'Iron Software, est une solution moderne et efficace pour gérer les archives ZIP dans les applications .NET. Grâce à son API intuitive, les développeurs peuvent facilement créer, lire et manipuler des fichiers ZIP. IronZIP offre des fonctionnalités avancées telles que des niveaux de compression personnalisables et une protection par mot de passe, garantissant ainsi la flexibilité et la sécurité des données. Compatible avec les dernières versions .NET et optimisé pour les performances, IronZIP rationalise les tâches de gestion des archives avec facilité et efficacité.

Sharpziplib Extraction de ZIP en C# (Comment ça fonctionne pour les développeurs) : Figure 4 - IronZIP for .NET : La bibliothèque d'archive ZIP en C#

Fonctionnalités d'IronZIP émerge comme une solution robuste et moderne qui résout les lacunes de SharpZipLib. Voici comment IronZIP comble ces lacunes :

  1. API Avancée : IronZIP propose une API intuitive et conviviale pour les développeurs, qui simplifie les tâches de gestion des archives. Avec IronZIP, les développeurs peuvent réaliser des opérations complexes avec seulement quelques lignes de code, réduisant ainsi le temps et les efforts de développement.

  2. Support complet de .NET : IronZIP prend entièrement en charge les dernières versions de .NET, y compris .NET Core, .NET Standard et .NET Framework, garantissant la compatibilité avec les environnements et plateformes de développement modernes.

  3. Documentation complète : IronZIP est accompagné d'une documentation complète et d'exemples, permettant aux développeurs de saisir rapidement ses fonctionnalités et capacités. La documentation complète aide à simplifier la courbe d'apprentissage et facilite l'intégration rapide dans les projets.

  4. Contrôle du niveau de compression : IronZIP offre aux développeurs un contrôle sur le niveau de compression, leur permettant d'ajuster le niveau de compression en fonction de leurs besoins. Cette fonction permet aux développeurs de trouver un équilibre entre la réduction de la taille des fichiers et la vitesse de compression.

  5. Protection par mot de passe : IronZIP prend en charge la protection par mot de passe pour les archives ZIP, renforçant la sécurité des données sensibles. Les développeurs peuvent facilement crypter les archives ZIP avec des mots de passe traditionnels, AES128 et AES256, garantissant ainsi que seuls les utilisateurs autorisés peuvent accéder au contenu de l'archive.

  6. Optimisation des performances : IronZIP est optimisé pour la performance, offrant des vitesses de compression et d'extraction plus rapides par rapport à SharpZipLib. Cette optimisation permet aux développeurs de traiter efficacement de grands volumes de données sans compromettre les performances.

    Explorez la documentation d'IronZIP pour plus d'informations sur la prise en main avec IronZIP. Les exemples de code IronZIP vous aident à démarrer sans aucune difficulté.

Installation d'IronZIP

Voici les étapes à suivre pour intégrer XDocument à IronPDF :

  • Ouvrez Visual Studio IDE ou votre IDE préféré.
  • Dans le menu Outils, accédez à la console NuGet Package Manager.
  • Exécutez la commande suivante pour installer le paquetage IronZIP :
  Install-Package IronZip
  Install-Package IronZip
SHELL
  • Vous pouvez également l'installer à partir de NuGet Package Manager for Solutions.
  • Sélectionnez IronZIP dans l'onglet de navigation de NuGet et cliquez sur installer :

    Sharpziplib Extract ZIP C# (Comment ça fonctionne pour les développeurs) : Figure 5 - Installer IronZIP en utilisant la gestion de paquetages NuGet de la solution en recherchant IronZip dans la barre de recherche du gestionnaire de paquetages NuGet, puis sélectionnez le projet et cliquez sur le bouton Installer.

Exemple de code

Le code source suivant montre comment IronZIP crée efficacement un fichier ZIP avec IronZIP facilement et avec seulement quelques lignes de code. Ici, vous pouvez ajouter plusieurs fichiers à l'archive ZIP protégée par mot de passe en fournissant les noms de fichiers dans le dossier spécifié. Lors de la création de l'objet IronZipArchive, vous pouvez également spécifier le niveau de compression pour réduire la taille de l'espace du fichier de sortie.

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
$vbLabelText   $csharpLabel

Fichier Zip de sortie

Extrait ZIP Sharpziplib C# (Comment cela fonctionne pour les développeurs) : Figure 6 - Sortie : Archive Zip protégée par mot de passe créée avec IronZIP.

Conclusion

Vue d'ensemble de SharpZipLib apparaît comme une bibliothèque de compression puissante pour .NET, offrant un ensemble riche de fonctionnalités et de capacités pour gérer efficacement les fichiers compressés. Qu'il s'agisse de compresser des données pour le stockage, d'archiver des fichiers ou d'optimiser l'utilisation de la bande passante dans les services web, SharpZipLib fournit les outils nécessaires pour rationaliser les opérations de compression et de décompression. Grâce à sa nature open-source, sa compatibilité multiplateforme et ses fonctionnalités robustes, SharpZipLib reste un choix de premier ordre pour les développeurs à la recherche d'une solution fiable pour les tâches de compression dans leurs applications .NET.

Bien que SharpZipLib ait été un choix fiable pour travailler avec des archives compressées dans les applications .NET, ses limites sont devenues de plus en plus évidentes dans le paysage actuel du développement. Explorez l'API IronZIP intervient pour combler les lacunes laissées par SharpZipLib, offrant une alternative moderne et riche en fonctionnalités qui privilégie la facilité d'utilisation, la performance et la compatibilité. Avec IronZIP, les développeurs peuvent exploiter de nouvelles possibilités en matière de gestion d'archives et rationaliser leur flux de développement grâce à des fonctionnalités avancées et à une API intuitive.

IronZIP fournit un aperçu des licences d'essai gratuit. Téléchargez la bibliothèque depuis IronZIP Downloads et essayez-la.

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.
< PRÉCÉDENT
Xceed.Document .NET (Comment ça marche pour les développeurs)
SUIVANT >
Xdocument C# (Comment ça marche pour les développeurs)