COMPRIMIR DIRECTORIO

Moderador: raul338

C#, tambien llamado C Sharp

COMPRIMIR DIRECTORIO

Notapor Project2501 » Mié Jul 04, 2007 2:52 am

Hola estoy haciendo un compresor de ficheros utilizando la librería IShapCode.SharpZipLib.dll para comprimirlos con winzip.

Cuando le paso una carpeta me lo hace bien pero cuando le paso varias carpetas de un directorio entero, o me guarda todos los ficheros sin guardarme la estructura de carpetas, o sólo me guarda la primera carpeta. No sé qué hago mal, por favor alguien podría ayudarme??? Os dejo dos procedimientos que he hecho.

//con esta opcion solo me comprime una carpeta

public void comprimirDirectorio(string directorio)

{

ZipOutputStream zipFile = null;



try

{

foreach (string dir in Directory.GetDirectories(directorio))

{

//aquí hay que asignarle el nombre que queremos que tenga el fichero comprimido

if (!File.Exists(@"C:\SDS\Modulos Enviados\ModificacionesRecientes.zip"))

{

zipFile = new ZipOutputStream(File.Create(@"C:\SDS\Modulos Enviados\ModificacionesRecientes.zip"));

zipFile.SetLevel(9); //max compression

}



List<string> files = new List<string>(Directory.GetFiles(dir));



foreach (string file in files)

{

byte[] buffer = new byte[4096];



List<string> dirSplit = new List<string>(dir.Split(@"\".ToCharArray()));

List<string> fileSplit = new List<string>(file.Split(@"\".ToCharArray()));



ZipEntry entry = new ZipEntry(dirSplit[dirSplit.Count - 1] + @"\" + fileSplit[fileSplit.Count - 1]);

entry.DateTime = DateTime.Now;

zipFile.PutNextEntry(entry);



FileStream fs = null;

try

{

fs = File.OpenRead(file);

int bytes = 1;



while (bytes > 0)

{

bytes = fs.Read(buffer, 0, buffer.Length);

zipFile.Write(buffer, 0, bytes);

}

}

catch

{

}

finally

{

if (fs != null)

{

fs.Close();

}

}

}

}

}

catch

{

}

finally

{

if (zipFile != null)

{

zipFile.Finish();

zipFile.Close();

}

}

}



//*****************************************************************
//con esta opción me comprime todos los archivos del directorio pero pierde toda la estructura de las carpetas
public void CompressDirectory(string directorio, ZipOutputStream zip)

{

zip.SetLevel(9);

foreach (string file in Directory.GetFiles(directorio))

WriteToZip(file, file.Replace(directorio, null), zip);

}



//*******************************************************************



static void WriteToZip(string file, string entrypath, ZipOutputStream zip)

{

ZipEntry entry = new ZipEntry(entrypath);

entry.DateTime = DateTime.Now;

zip.PutNextEntry(entry);

if (!string.IsNullOrEmpty(file))

{

using (FileStream fs = File.OpenRead(file))

{

byte[] buffer = new byte[4096];

int bytes = 1;

while (bytes > 0)

{

bytes = fs.Read(buffer, 0, buffer.Length);

zip.Write(buffer, 0, bytes);

}

}

}

}

alguien puede ayudarme?????? muchas gracias a todos.
Project2501
Novato
Novato
 
Mensajes: 4
Registrado: Mié Jul 04, 2007 2:45 am


Notapor Vicitor2006 » Mié Jul 04, 2007 12:54 pm

Menos codigo y mas descripcion, oye puedes darme un poco mas de informacion para esto, es que no estoy muy en contacto con esa instruccion de C#
Estoy aki para aprender
Imagen
Avatar de Usuario
Vicitor2006
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 127
Registrado: Mié May 23, 2007 11:38 am



    

Volver a C#

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados