Extraer archivos comprimidos en C# y .NET

Descomprima ZIP y otros formatos de archivo mediante programación en aplicaciones .NET.

Extracción de archivos comprimidos en .NET

Aspose.ZIP for .NET es una biblioteca administrada para abrir archivos comprimidos y extraer su contenido desde aplicaciones C#. Sus API permiten leer entradas, recuperar todos los elementos o solo una selección, conservar la estructura de directorios y escribir el resultado en una carpeta o un flujo. Todo el procesamiento se realiza dentro de la aplicación, por lo que los flujos de trabajo del servidor no dependen de programas de escritorio ni de utilidades de línea de comandos.

Entre los casos de uso habituales se encuentran la ingesta de documentos, la restauración de copias de seguridad, la preparación de paquetes de despliegue, el procesamiento de cargas y el intercambio automatizado de datos. La misma API puede utilizarse en servicios ASP.NET, procesos en segundo plano, aplicaciones de escritorio, tareas en la nube y canalizaciones de CI/CD.

El procedimiento concreto depende del formato. ZIP, 7Z, RAR, TAR y CAB utilizan estructuras, métodos de compresión y clases de API diferentes. Esta página presenta el flujo común de extracción; las guías por formato indican después la clase, las opciones y las limitaciones aplicables a cada tipo de archivo.

¿Qué es un extractor de archivos comprimidos?

Un extractor abre un contenedor que almacena uno o varios archivos y recupera su contenido. Por lo general, lee los metadatos, identifica entradas y directorios, descomprime los datos y escribe el resultado en una ubicación autorizada. Los archivos cifrados también requieren credenciales válidas y opciones compatibles con el formato.

Los términos extraer, descomprimir y desempaquetar suelen utilizarse para describir operaciones similares. Descomprimir un ZIP se refiere específicamente a recuperar el contenido de un contenedor ZIP, mientras que la extracción de archivos abarca también formatos como 7Z, RAR, TAR, CAB, CPIO y XZ.

En un entorno de producción, extraer no consiste únicamente en llamar a un método. La aplicación puede necesitar revisar los nombres de entrada, elegir elementos concretos, conservar carpetas, aceptar flujos, gestionar contraseñas, controlar errores y aplicar límites antes de escribir datos en almacenamiento permanente.

Cómo funciona la extracción de archivos

Un flujo de trabajo habitual en C# consta de siete etapas:

  1. Recibir el archivo desde una ruta local, una carga, un flujo o un servicio de almacenamiento.
  2. Comprobar que la aplicación admite el formato.
  3. Abrir el contenedor con la clase de API diseñada para ese formato.
  4. Inspeccionar las entradas cuando se necesite filtrar o realizar una extracción selectiva.
  5. Validar las rutas de salida y los límites de recursos antes de escribir archivos.
  6. Extraer las entradas aprobadas en un destino aislado.
  7. Entregar el resultado a la siguiente etapa y eliminar los datos temporales.

La clase utilizada para abrir el contenido depende del tipo de entrada, ya que ZIP, 7Z, RAR, TAR y CAB no comparten el mismo modelo interno. Aun así, un servicio puede ofrecer un único flujo de trabajo y dirigir cada contenedor a la API de Aspose.ZIP correspondiente.

Formatos disponibles para la extracción

La biblioteca trabaja con formatos de archivo y compresión populares, entre ellos ZIP, 7Z, RAR, TAR, GZIP, BZIP2, XZ, LZIP, Z, CPIO, CAB y WIM. Las operaciones disponibles varían: algunos formatos contienen varias entradas, mientras que otros representan un único flujo comprimido o un contenedor TAR envuelto en otra capa de compresión.

Seleccione el controlador que corresponda al contenedor real y no se base únicamente en la extensión del nombre. Antes de integrar un formato en una canalización automática, compruebe que admite la operación, el método de cifrado y el comportamiento de flujo que necesita.

Flujos de trabajo habituales de extracción

Extraer el archivo completo. Utilice la extracción total cuando necesite todas las entradas y la entrada ya haya superado la validación. Conserve la jerarquía original cuando proceda y asigne un destino único a cada tarea para que las solicitudes simultáneas no sobrescriban ni mezclen resultados.

Recuperar solo determinadas entradas. Recorra Archive.Entries y aplique las reglas de la aplicación antes de escribir datos. Esta opción resulta útil cuando el paquete contiene muchos recursos, pero el proceso solo necesita un documento, un manifiesto, un archivo de configuración o una carpeta conocida.

Procesar un flujo. La entrada basada en flujos encaja con cargas de ASP.NET, almacenamiento de objetos, bases de datos y sistemas de mensajería. Defina claramente quién controla el flujo y su ciclo de vida, y evite cargar en memoria un archivo de tamaño no limitado.

Abrir contenido protegido. Proporcione las credenciales mediante las opciones de descifrado disponibles para el formato. Las contraseñas deben proceder de una configuración protegida o un almacén de secretos y nunca deben escribirse en los registros.

Tratar entradas grandes como tareas limitadas. Restrinja el tamaño comprimido y descomprimido, el número de entradas, el tiempo de procesamiento y el uso de almacenamiento temporal. Defina estos límites en la aplicación en lugar de confiar en la extensión.

Añadir Aspose.ZIP a un proyecto C#

Instale el paquete NuGet de Aspose.ZIP en un proyecto C# compatible con .NET para Windows, Linux o macOS. Después, importe el espacio de nombres necesario y seleccione la clase correspondiente al contenedor de entrada. El proceso también necesita permisos de lectura sobre el origen, permisos de escritura sobre el destino y almacenamiento temporal suficiente para el límite de expansión configurado.

Utilice el siguiente comando de la Consola del Administrador de paquetes:

Package Manager Console

PM> Install-Package Aspose.Zip

Ejemplo en C#: descomprimir un archivo ZIP

ZIP ofrece un ejemplo sencillo del flujo común. El código abre la entrada y escribe su contenido en un directorio de destino. Antes de aplicar este patrón a archivos externos, valide el contenedor, las rutas de salida y los límites de recursos.

Extraer el contenido de un ZIP a un directorio

using Aspose.Zip;
using System.IO;

string archivePath = Path.GetFullPath("input.zip");
string outputDirectory = Path.GetFullPath("extracted");

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    archive.ExtractToDirectory(outputDirectory);
}

Extracción segura en entornos de producción

Trate los archivos procedentes de usuarios o sistemas externos como entradas no confiables. Que la extensión sea la esperada no demuestra que el contenedor sea válido o seguro. Compruebe que el controlador seleccionado puede interpretar los datos y rechace las entradas dañadas o no compatibles.

Antes de escribir una entrada, resuelva su ruta respecto al destino autorizado. Rechace rutas absolutas, segmentos que suban al directorio superior y cualquier resultado situado fuera de la carpeta prevista. De este modo, los nombres almacenados en el archivo no podrán redirigir la escritura a otra ubicación del sistema.

Establezca límites para el tamaño comprimido, el tamaño total y por entrada una vez descomprimido, el número de entradas, la profundidad de anidamiento, el tiempo de ejecución y la concurrencia. Utilice una carpeta temporal independiente con permisos restringidos, conserve únicamente los resultados validados y limpie los datos después de operaciones correctas y fallidas.

Los registros deben contener identificadores de operación y estados, no contraseñas, nombres privados ni contenido extraído. Si el resultado va a analizarse, previsualizarse o escanearse, considere cada componente posterior como un límite de confianza independiente.

Probar la extracción en el navegador

La aplicación gratuita de extracción en línea permite probar archivos de ejemplo sin instalar software. Puede utilizarla para comprobar el resultado esperado antes de implementar el flujo en C#.

La herramienta web está pensada para tareas interactivas. La biblioteca .NET se orienta a servicios repetibles, procesos en segundo plano, canalizaciones de almacenamiento y aplicaciones empresariales en las que la validación y la salida deben permanecer bajo el control de la aplicación.

Guías de extracción para cada tipo de archivo

Los detalles de implementación cambian según el contenedor y el formato almacenado. Las guías específicas incluyen:

  • la clase de Aspose.ZIP adecuada para abrir el archivo;
  • ejemplos de extracción completa o selectiva;
  • el comportamiento de contraseñas y cifrado;
  • el procesamiento mediante flujos cuando corresponda;
  • restricciones y consideraciones para producción;
  • referencias a la API y a la documentación.

Consulte la guía del tipo de entrada real al pasar de esta introducción a la implementación. Así evitará aplicar supuestos propios de ZIP a 7Z, RAR, TAR, CAB u otros formatos con un comportamiento diferente.

Guías de extracción por formato de archivo

Consulte páginas de extracción en C# para archivos y recursos que suelen almacenarse dentro de paquetes ZIP.

Recursos para trabajar con archivos comprimidos

Preguntas frecuentes sobre la extracción de archivos

1. ¿Cómo extraigo archivos comprimidos en C#?

Instale Aspose.ZIP, abra la entrada con la clase correspondiente a su formato y extraiga el contenedor completo o determinadas entradas en un directorio o flujo autorizado.

2. ¿Cómo puedo extraer archivos de un ZIP?

Cree una instancia de Archive para el ZIP y llame a ExtractToDirectory para recuperar todo el contenido. Recorra Archive.Entries cuando necesite inspeccionar o guardar únicamente elementos concretos.

3. ¿Extraer un archivo comprimido es lo mismo que descomprimir un ZIP?

Descomprimir un ZIP se refiere específicamente a archivos ZIP. La extracción es un concepto más amplio que también abarca formatos como 7Z, RAR, TAR, CAB, CPIO y WIM.

4. ¿Las aplicaciones .NET pueden abrir archivos protegidos con contraseña?

Aspose.ZIP admite acceso mediante contraseña para los formatos aplicables cuando se proporcionan credenciales válidas y las opciones de descifrado adecuadas. El comportamiento exacto depende del tipo de contenedor.

5. ¿Cómo deben extraerse de forma segura los archivos cargados por usuarios?

Use almacenamiento temporal aislado, valide todas las rutas de salida, limite los formatos aceptados y los tamaños comprimido y descomprimido, establezca un tiempo máximo de procesamiento y elimine los datos temporales al finalizar.