Los archivos ZIP se utilizan para comprimir y guardar uno o más archivos o carpetas en un solo contenedor. Un archivo ZIP encapsula los archivos y carpetas y también contiene su información de metadatos. El uso más común de archivado es reducir el tamaño de los archivos para almacenamiento o transmisión y aplicar cifrado por seguridad. Además de las herramientas de compresión de archivos, las funciones de compresión/extracción automatizadas también se utilizan en varias aplicaciones web y de escritorio para cargar, descargar, compartir o cifrar los archivos. Este artículo también se enfoca en escenarios similares y presenta algunas formas sencillas de comprimir archivos o carpetas y crear archivos ZIP mediante programación usando C#.
En este artículo, aprenderá a realizar las siguientes operaciones de archivo ZIP:
- Crea un archivo ZIP usando C#
- Agregar varios archivos a un archivo ZIP
- Agregar carpetas a un archivo ZIP
- Cree un archivo ZIP protegido con contraseña usando ZipCrypto
- Cifrar archivo ZIP con cifrado AES
- Establecer el modo de compresión paralelo
Requisito previo - Biblioteca ZIP de C#
Aspose.ZIP for .NET es una API poderosa y fácil de usar para comprimir o descomprimir archivos y carpetas dentro de aplicaciones .NET. También proporciona técnicas de cifrado AES para cifrar los archivos en archivos ZIP. Puede instalar la API desde NuGet o descargar sus binarios desde la sección Descargas.
Crear un archivo ZIP en C#
Los siguientes son los pasos para comprimir un archivo agregándolo a un archivo ZIP:
- Cree un objeto FileStream para el archivo ZIP de salida.
- Abra el archivo de origen en un objeto FileStream.
- Cree un objeto de la clase Archive.
- Agregue el archivo al archivo utilizando el método Archive.CreateEntry(string, FileStream).
- Cree el archivo ZIP usando el método Archive.Save(FileStream).
El siguiente ejemplo de código muestra cómo agregar un archivo a un archivo ZIP usando C#.
// Crear FileStream para el archivo ZIP de salida
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
// Archivo que se agregará al archivo
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings()))
{
// Agregar archivo al archivo
archive.CreateEntry("alice29.txt", source1);
// archivo zip
archive.Save(zipFile);
}
}
}
Agregue varios archivos en un archivo ZIP en C#
En caso de que desee agregar varios archivos en un archivo ZIP, puede hacerlo de una de las siguientes maneras.
ZIP varios archivos usando FileStream
En este método, la clase FileStream se usa para agregar archivos al archivo ZIP usando el método Archive.CreateEntry(String, FileStream). El siguiente ejemplo de código muestra cómo agregar varios archivos en un ZIP en C#.
// Crear FileStream para el archivo ZIP de salida
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Archivo que se agregará al archivo
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// Archivo que se agregará al archivo
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// Agregar archivos al archivo
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// comprimir los archivos
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
}
}
}
}
ZIP varios archivos usando FileInfo
También puede usar la clase FileInfo para agregar varios archivos a un archivo ZIP. En este método, los archivos se cargarán usando la clase FileInfo y se agregarán al archivo ZIP usando el método Archive.CreateEntry(String, FileInfo). El siguiente ejemplo de código muestra cómo comprimir varios archivos mediante la clase FileInfo en C#.
// Crear FileStream para el archivo ZIP de salida
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Archivos que se agregarán al archivo
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// Agregar archivos al archivo
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// Crear archivo ZIP
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
Archivos ZIP usando la ruta
En lugar de utilizar las clases FileInfo o FileStream para las entradas ZIP, puede proporcionar la ruta del archivo directamente al método Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). El siguiente ejemplo de código muestra cómo comprimir archivos utilizando su ruta.
// Crear FileStream para el archivo ZIP de salida
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
// Crear archivo
using (var archive = new Archive())
{
// Agregar archivo al archivo ZIP
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
Agregar carpetas a un archivo ZIP en C#
También puede comprimir una carpeta, lo que podría ser otra alternativa para agregar varios archivos a un archivo ZIP. Simplemente coloque los archivos de origen en una carpeta y agregue esa carpeta al archivo ZIP. Los siguientes son los pasos para comprimir una carpeta:
- Cree un objeto de clase FileStream para el archivo ZIP de salida.
- Cree una instancia de la clase Archive.
- Utilice la clase DirectoryInfo para especificar la carpeta que se va a comprimir.
- Use el método Archive.CreateEntries(DirectoryInfo) para agregar una carpeta en ZIP.
- Cree el archivo ZIP usando el método Archive.Save(FileStream).
El siguiente ejemplo de código muestra cómo agregar una carpeta a ZIP en C#.
// Crear FileStream para el archivo ZIP de salida
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive())
{
// Carpeta a comprimir
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Crear archivo ZIP
archive.Save(zipFile);
}
}
Cree un ZIP protegido con contraseña usando ZipCrypto en C#
Puede proteger los archivos ZIP con contraseñas y aplicar el cifrado ZipCrypto. Para ello se utiliza la clase ArchiveEntrySettings en el constructor del Archive que acepta el tipo de cifrado como segundo parámetro.
El siguiente ejemplo de código muestra cómo crear un archivo ZIP protegido con contraseña mediante ZipCrypto en C#.
// Crear FileStream para el archivo ZIP de salida
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
{
// Agregar carpeta al archivo
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Crear archivo ZIP
archive.Save(zipFile);
}
}
C# Crear ZIP protegido con contraseña con cifrado AES
Aspose.ZIP for .NET también le permite aplicar el cifrado AES para proteger los archivos ZIP. Puede utilizar los siguientes métodos de cifrado AES:
- AES128
- AES192
- AES256
Para aplicar el cifrado AES, la API ofrece la clase AesEcryptionSettings. El siguiente ejemplo de código muestra cómo crear un ZIP protegido con contraseña con cifrado AES en C#.
// Crear FileStream para el archivo ZIP de salida
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
{
// Agregar carpeta al archivo
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Crear archivo ZIP
archive.Save(zipFile);
}
}
Establecer el modo de compresión paralela
También puede configurar la API para compresión paralela en caso de múltiples entradas. Para esto, puede especificar el modo de compresión paralela usando la clase ParallelOptions. Aspose.ZIP for .NET proporciona los siguientes modos de compresión en paralelo.
- Never - No comprima en paralelo.
- Always: comprima en paralelo (cuidado con la memoria).
- Auto: decida si usar o no la compresión paralela en las entradas. Esta opción puede comprimir algunas entradas solo en paralelo.
El siguiente ejemplo de código muestra cómo establecer el modo de compresión en paralelo al comprimir varios archivos.
// Para obtener ejemplos completos y archivos de datos, vaya a https://github.com/aspose-zip/Aspose.ZIP-for-.NET
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
{
using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2);
//Definir el criterio de paralelismo
var parallelOptions = new ParallelOptions
{
ParallelCompressInMemory = ParallelCompressionMode.Always
};
archive.Save(zipFile,
new ArchiveSaveOptions()
{
ParallelOptions = parallelOptions,
Encoding = Encoding.ASCII,
ArchiveComment = "There are two poems from Canterbury corpus"
});
}
}
}
}
Más información sobre Aspose.ZIP for .NET
Explore más sobre nuestra API C# ZIP utilizando los siguientes recursos:
Conclusión
En este artículo, ha aprendido a crear archivos ZIP mediante programación en C#. Los ejemplos de código han demostrado cómo agregar archivos y carpetas en los archivos ZIP. Además, también hemos cubierto cómo crear archivos ZIP protegidos con contraseña con los métodos de cifrado ZipCrypto y AES en C#. Además, la compresión paralela de múltiples entradas también se analiza al final. En caso de que tenga alguna pregunta o consulta, puede preguntarnos a través de nuestro foro.