jueves, 21 de octubre de 2010

C# : Crear un fichero ZIP con múltiples ficheros.

¿Necesitas comprimir varios ficheros en una carpeta .ZIP para (por ejemplo) , enviarlos por correo?

En primer lugar, necesitas añadir vjslib.dll  a las referencias de tu proyecto. Puedes hacerlo desde la solapa .NET del diálogo de referencias, o navegando a la carpeta ( C:\WINDOWS\Microsoft.NET\Framework\  o similar).

Actualización 15/11/12 : Si tienes problemas añadiendo la referencia, quizás necesites instalar el "Microsoft J# Redistributable Package" Puedes descargarlo de  aquí

Una vez hayas añadido la referencia, podrás usar las clases de J# desde tu programa C#:

using java.util.zip;
using java.io;

Bien, pues suponiendo que tienes un array con los nombres de fichero a comprimir...

string[] ficheros_adjuntos = { "c:\\fich1.txt", "c:\\fich2.txt", "c:\\fich.txt" };

... y quieres crear una carpeta ZIP que los contenga ...

string nombre_fichero_salida = "c:\\fichero.zip";

El código sería similar a esto...

// Creamos un nuevo fichero zip


FileOutputStream streamSalida = new FileOutputStream( nombre_fichero_salida, false);
ZipOutputStream zipStream = new ZipOutputStream(streamSalida);


foreach (string fichero in ficheros_adjuntos)
{
   sbyte[] contenido = new sbyte[1024];
   int bytesLeidos = 0;


   // Añadimos una entrada al fichero .zip Hay una entrada .zip por cada fichero que añadimos
   ZipEntry ze = new ZipEntry(fichero.Replace ("c:\\" , ""));
   zipStream.putNextEntry(ze);


   // Volcamos el contenido del fichero de entrada al stream de compresión
   FileInputStream fichero_entrada = new FileInputStream(fichero);


   while ((bytesLeidos = fichero_entrada.read(contenido)) >= 0)
   {
        zipStream.write(contenido, 0 , bytesLeidos);
   }


   // Cerramos la entrada del fichero .zip y el fichero de entrada
   zipStream.closeEntry();
   fichero_entrada.close();
}


// Cerramos el stream y el fichero de salida
zipStream.close();
streamSalida.close();


Saludos.

No hay comentarios:

Publicar un comentario