AYUDA .NET

Sharpziplib Extraer ZIP C# (Cómo Funciona Para Desarrolladores)

Actualizado 6 de junio, 2024
Compartir:

En el panorama digital actual, en el que la gestión de datos es primordial, contar con herramientas eficaces de compresión y descompresión es crucial. Una de estas herramientas que destaca en el ecosistema .NET es SharpZipLib. En este artículo, profundizaremos en SharpZipLib, explorando sus características, aplicaciones y cómo integrarlo en sus proyectos .NET.

¿Qué es SharpZipLib?

SharpZipLib es una biblioteca de compresión de código abierto para .NET con numerosas funciones, escrita íntegramente en C#. Es compatible con varios formatos de compresión, como ZIP, GZip y Tar. Desarrollado por una comunidad dedicada, SharpZipLib ofrece una amplia gama de funcionalidades para comprimir y descomprimir archivos de manera eficiente.

Características y capacidades

  1. Soporte para múltiples formatos de compresión: SharpZipLib soporta formatos de compresión populares como ZIP, GZip y Tar, atendiendo a diversos casos de uso y requisitos.
  2. Operaciones basadas en flujos: La biblioteca opera con flujos, lo que permite a los desarrolladores trabajar con datos de diversas fuentes, incluidos archivos, flujos de memoria o flujos de red. Esta flexibilidad facilita una integración perfecta en distintas partes de una aplicación.
  3. Niveles de compresión: Los desarrolladores pueden ajustar los niveles de compresión para encontrar un equilibrio entre la relación de compresión y la velocidad de procesamiento, en función de sus necesidades específicas.
  4. Protección por contraseña: SharpZipLib permite la creación de archivos ZIP protegidos por contraseña, garantizando la seguridad de los datos mediante la encriptación de los contenidos con una contraseña especificada.
  5. Manejo y recuperación de errores: Los robustos mecanismos de manejo de errores permiten a los desarrolladores manejar con elegancia las excepciones durante las operaciones de compresión y descompresión. Además, SharpZipLib permite recuperar archivos dañados, lo que aumenta su fiabilidad.

Casos prácticos

  1. Compresión y archivado de archivos: SharpZipLib es ideal para aplicaciones que requieren comprimir y archivar archivos, como utilidades de copia de seguridad, herramientas de gestión de archivos o funcionalidades de exportación de datos.
  2. Servicios web y API: Los servicios web que se ocupan de transferencias de archivos o intercambio de datos suelen beneficiarse de la compresión para reducir el uso del ancho de banda. SharpZipLib puede integrarse perfectamente en este tipo de servicios para comprimir los datos salientes o descomprimir las cargas útiles entrantes de manera eficiente.
  3. Aplicaciones de escritorio: Las aplicaciones de escritorio que trabajan con grandes conjuntos de datos o archivos de recursos pueden aprovechar SharpZipLib para comprimir archivos para su almacenamiento o distribución. Esto es especialmente útil para instaladores de software o herramientas de sincronización de datos.
  4. Copia de seguridad y almacenamiento de datos: Las aplicaciones que requieren copias de seguridad periódicas o el almacenamiento de datos en formato comprimido pueden automatizar el proceso de copia de seguridad y conservar el espacio de almacenamiento de manera eficaz utilizando SharpZipLib.

Ventajas de SharpZipLib

  1. **Como biblioteca de código abierto, SharpZipLib fomenta la colaboración y las contribuciones de la comunidad, garantizando la mejora continua y la adaptabilidad a las necesidades cambiantes.
  2. Compatibilidad multiplataforma: SharpZipLib, al estar escrito en C# y estar orientado al marco .NET, es compatible con varias plataformas, incluyendo Windows, Linux y macOS, lo que aumenta su versatilidad.
  3. Ligero y eficiente: SharpZipLib está diseñado para ser ligero y eficiente, minimizando el consumo de recursos al tiempo que ofrece capacidades de compresión y descompresión de alto rendimiento.
  4. Amplia documentación y soporte: La completa documentación y el soporte de la comunidad facilitan a los desarrolladores la integración y la resolución de problemas al utilizar SharpZipLib.

Crear C# Proyecto Visual Studio

  1. Abra Visual Studio y haga clic en la opción "Crear un nuevo proyecto".
  2. Elija la plantilla de proyecto adecuada en función de sus necesidades (por ejemplo, aplicación de consola, aplicación Windows Forms).

    Sharpziplib Extraer ZIP C# (Cómo funciona para los desarrolladores): Figura 1 - Para el nuevo proyecto, seleccione un "Console App" en C#.

  3. Especifique el nombre y la ubicación del proyecto y haga clic en "Siguiente".

    Sharpziplib Extraer ZIP C# (Cómo funciona para los desarrolladores): Figura 2 - Configure su proyecto especificando el nombre del proyecto, la ubicación y el nombre de la solución. A continuación, seleccione .NET Framework y haga clic en Crear.

  4. En Información adicional, seleccione la última versión de .NET Framework. Haga clic en "Crear" para crear el proyecto.

Proceso de instalación

Para integrar SharpZipLib en su proyecto .NET:

  1. En su Visual Studio C# ConsoleApp, haga clic con el botón derecho en su proyecto en el Explorador de soluciones y seleccione "Administrar paquetes NuGet..."
  2. En la ventana del gestor de paquetes NuGet, busque "SharpZipLib".

    Sharpziplib Extraer ZIP C# (Cómo funciona para los desarrolladores): Figura 3 - Instalar SharpZipLib utilizando el Administrar paquete NuGet para la solución mediante la búsqueda "sharpziplib" en la barra de búsqueda de NuGet Package Manager, a continuación, seleccione el proyecto y haga clic en el botón Instalar.

  3. Seleccione "SharpZipLib" en los resultados de la búsqueda y haga clic en el botón "Instalar".
  4. NuGet descargará y añadirá automáticamente las dependencias necesarias a su proyecto.

Ejemplo de código

A continuación se muestra un ejemplo simplificado que demuestra cómo utilizar SharpZipLib para comprimir y descomprimir archivos:

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";
            //  Comprimir archivos
            CompressDirectory(sourceDirectory, zipFilePath);
            Console.WriteLine("Files compressed successfully.");
            string extractPath = @"C:\OutputDirectory\extracted";
            //  Descomprimir archivos
            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); //  Nivel de compresión (0-9)
                //  Añade recursivamente los archivos del directorio fuente al archivo ZIP
                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";
            //  Comprimir archivos
            CompressDirectory(sourceDirectory, zipFilePath);
            Console.WriteLine("Files compressed successfully.");
            string extractPath = @"C:\OutputDirectory\extracted";
            //  Descomprimir archivos
            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); //  Nivel de compresión (0-9)
                //  Añade recursivamente los archivos del directorio fuente al archivo ZIP
                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"
			'  Comprimir archivos
			CompressDirectory(sourceDirectory, zipFilePath)
			Console.WriteLine("Files compressed successfully.")
			Dim extractPath As String = "C:\OutputDirectory\extracted"
			'  Descomprimir archivos
			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) '  Nivel de compresión (0-9)
				'  Añade recursivamente los archivos del directorio fuente al archivo ZIP
				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
VB   C#

SharpZipLib ha sido durante mucho tiempo un elemento básico en la comunidad de desarrollo del lenguaje .NET, proporcionando una funcionalidad esencial para trabajar con archivos comprimidos como ZIP, GZip, Tar y BZip2. Sin embargo, a medida que la tecnología evoluciona y los desarrolladores buscan soluciones más avanzadas, ciertas limitaciones de SharpZipLib se han hecho evidentes.

Limitaciones de SharpZipLib

  1. Complejidad: La API de SharpZipLib puede ser engorrosa y verbosa, requiriendo que los desarrolladores escriban código largo para realizar tareas simples como crear o extraer archivos ZIP.
  2. Falta de características modernas: SharpZipLib carece de soporte para las modernas características y plataformas .NET, haciéndolo menos adecuado para los entornos de desarrollo contemporáneos.
  3. Documentación Limitada: Aunque SharpZipLib ha existido durante mucho tiempo, su documentación es a menudo escasa y anticuada, lo que hace difícil para los desarrolladores empezar o solucionar problemas.
  4. Rendimiento: El rendimiento de SharpZipLib puede no cumplir siempre las expectativas de los desarrolladores, especialmente cuando se trata de archivos grandes o complejos.

IronZIP: salvando las distancias

IronZIPdesarrollado por Iron Software es una solución moderna y eficaz para gestionar archivos ZIP en aplicaciones .NET. Con su intuitiva API, los desarrolladores pueden crear, leer y manipular fácilmente archivos ZIP. IronZIP ofrece funciones avanzadas como niveles de compresión personalizables y protección por contraseña, lo que garantiza la flexibilidad y la seguridad de los datos. Compatible con las últimas versiones de .NET y optimizado para el rendimiento, IronZIP agiliza las tareas de gestión de archivos con facilidad y eficacia.

Sharpziplib Extraer ZIP C# (Cómo funciona para desarrolladores): Figura 4 - IronZIP for .NET: La Librería de Archivo Zip C#

IronZIP surge como una solución robusta y moderna que subsana las deficiencias de SharpZipLib. Así es como IronZIP llena esos vacíos:

  1. API avanzada: IronZIP ofrece una API intuitiva y fácil de usar para los desarrolladores que simplifica las tareas de gestión de archivos. Con IronZIP, los desarrolladores pueden realizar operaciones complejas con unas pocas líneas de código, lo que reduce el tiempo y el esfuerzo de desarrollo.
  2. Compatibilidad total con .NET: IronZIP es totalmente compatible con las últimas versiones de .NET, incluidas .NET Core, .NET Standard y .NET Framework, lo que garantiza la compatibilidad con entornos y plataformas de desarrollo modernos.
  3. Documentación completa: IronZIP viene con una completa documentación y ejemplos, lo que permite a los desarrolladores comprender rápidamente sus características y capacidades. La extensa documentación ayuda a agilizar la curva de aprendizaje y facilita una rápida integración en los proyectos.
  4. Control del nivel de compresión: IronZIP proporciona a los desarrolladores control sobre el nivel de compresión, permitiéndoles ajustar el nivel de compresión en función de sus necesidades. Esta función permite a los desarrolladores encontrar un equilibrio entre la reducción del tamaño de los archivos y la velocidad de compresión.
  5. Protección por contraseña: IronZIP soporta protección por contraseña para archivos ZIP, mejorando la seguridad de los datos sensibles. Los desarrolladores pueden cifrar fácilmente archivos ZIP con contraseñas tradicionales, AES128 y AES256, garantizando que sólo los usuarios autorizados puedan acceder al contenido del archivo.
  6. Optimización del rendimiento: IronZIP está optimizado para el rendimiento, ofreciendo velocidades de compresión y extracción más rápidas en comparación con SharpZipLib. Esta optimización garantiza que los desarrolladores puedan manejar con eficacia grandes volúmenes de datos sin comprometer el rendimiento.

    También proporciona un documentación con cómo empezar a utilizar IronZIP. Listo para usar ejemplos de código te ayuda a empezar sin complicaciones.

Instalación de IronZIP

Estos son los pasos para integrar XDocument con IronPDF:

  • Abrir Visual Studio o su IDE preferido.
  • En el menú Herramientas, vaya a la Consola del Gestor de paquetes NuGet.
  • Ejecute el siguiente comando para instalar el paquete IronZIP:
  :ProductInstall
  • También puede instalarlo desde NuGet Package Manager for Solutions.
  • Seleccione IronZIP en la pestaña de NuGet y haga clic en instalar:

    Sharpziplib Extraer ZIP C# (Cómo funciona para los desarrolladores): Figura 5 - Instale IronZIP utilizando el Gestor de Paquetes NuGet para Solución buscando "IronZip" en la barra de búsqueda del Gestor de Paquetes NuGet, luego seleccione el proyecto y haga clic en el botón Instalar.

Ejemplo de código

El siguiente código fuente muestra la eficacia de IronZIP crea un archivo ZIP con facilidad y con sólo unas pocas líneas de código. Aquí puede añadir varios archivos a la carpeta ZIP protegido por contraseña proporcionando los nombres de los archivos en la carpeta especificada. Al crear el objeto IronZipArchive también puede especificar el nivel de compresión para reducir el tamaño del archivo de salida.

using IronZip;
using IronZip.Enum;
class Program
{
    static void Main()
    {
        //  Crear un ZIP vacío con la máxima compresión
        using (var archive = new IronZipArchive(9))
        {
            //  Protege el ZIP con contraseña (soporta AES128 y AES256)
            archive.SetPassword("P@ssw0rd", EncryptionMethods.Traditional);
            archive.AddArchiveEntry("./assets/file1.txt");
            archive.AddArchiveEntry("./assets/file2.txt");
            //  Exportar el ZIP
            archive.SaveAs("output.zip");
        }
    }
}
using IronZip;
using IronZip.Enum;
class Program
{
    static void Main()
    {
        //  Crear un ZIP vacío con la máxima compresión
        using (var archive = new IronZipArchive(9))
        {
            //  Protege el ZIP con contraseña (soporta AES128 y AES256)
            archive.SetPassword("P@ssw0rd", EncryptionMethods.Traditional);
            archive.AddArchiveEntry("./assets/file1.txt");
            archive.AddArchiveEntry("./assets/file2.txt");
            //  Exportar el ZIP
            archive.SaveAs("output.zip");
        }
    }
}
Imports IronZip
Imports IronZip.Enum
Friend Class Program
	Shared Sub Main()
		'  Crear un ZIP vacío con la máxima compresión
		Using archive = New IronZipArchive(9)
			'  Protege el ZIP con contraseña (soporta AES128 y AES256)
			archive.SetPassword("P@ssw0rd", EncryptionMethods.Traditional)
			archive.AddArchiveEntry("./assets/file1.txt")
			archive.AddArchiveEntry("./assets/file2.txt")
			'  Exportar el ZIP
			archive.SaveAs("output.zip")
		End Using
	End Sub
End Class
VB   C#

Archivo Zip de salida

Sharpziplib Extraer ZIP C# (Cómo Funciona Para Desarrolladores): Figura 6 - Salida: Archivo Zip con protección por contraseña creado usando IronZIP.

Conclusión

SharpZipLib surge como una potente biblioteca de compresión para .NET, que ofrece un rico conjunto de funciones y capacidades para manejar archivos comprimidos con eficacia. Ya se trate de comprimir datos para su almacenamiento, archivar ficheros u optimizar el uso del ancho de banda en servicios web, SharpZipLib proporciona las herramientas necesarias para agilizar las operaciones de compresión y descompresión. Gracias a su naturaleza de código abierto, su compatibilidad multiplataforma y su sólida funcionalidad, SharpZipLib sigue siendo la mejor opción para los desarrolladores que buscan una solución fiable para las tareas de compresión en sus aplicaciones .NET.

Aunque SharpZipLib ha sido una opción fiable para trabajar con archivos comprimidos en aplicaciones .NET, sus limitaciones se han hecho cada vez más evidentes en el panorama de desarrollo actual. IronZIP viene a llenar los vacíos dejados por SharpZipLib, ofreciendo una alternativa moderna y rica en funciones que prioriza la facilidad de uso, el rendimiento y la compatibilidad. Con IronZIP, los desarrolladores pueden desbloquear nuevas posibilidades en la gestión de archivos y agilizar su flujo de trabajo de desarrollo con funciones avanzadas e intuitivas API.

IronZIP proporciona un prueba gratuita página. Descargue la biblioteca de este y pruébalo.

< ANTERIOR
Xceed.Document .NET (Cómo funciona para desarrolladores)
SIGUIENTE >
Xdocument C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,848,088 Ver licencias >
123