Mensajes [7] - Enviado el Martes 03 de Julio de 2007 a las 09:24hs
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:SDSModulos EnviadosModificacionesRecientes.zip"))
{
zipFile = new ZipOutputStream(File.Create(@"C:SDSModulos EnviadosModificacionesRecientes.zip"));
zipFile.SetLevel(9); //max compression
}
List
foreach (string file in files)
{
byte[] buffer = new byte[4096];
List
List
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.