COMPRIMIR
Publicado por Lulu (40 intervenciones) el 28/06/2007 15:40:59
Hola, siguiendo algunos ejemplos que he encontrado por internet y tal estoy intentado comprimir un directorio completo con todos sus subdirectorios y lo intento hacer con esto:
public void comprimirDirectorio(List<string> directorios)
{
//de momento USAMOS ESTE PROCEDIMIENTO
ZipOutputStream zipFile = null;
for (int x = 0; x < directorios.Count; x++)
{
try
{
foreach (string dir in Directory.GetDirectories(directorios[x].ToString()))
{
//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 (Exception ex)
{
//Error Handling
}
finally
{
if (fs != null)
{
fs.Close();
}
}
}
}
}
catch (Exception ex)
{
//Error Handling
}
finally
{
if (zipFile != null)
{
zipFile.Finish();
zipFile.Close();
}
}
}
}
le paso un listado con los subdirecorios y los subsubdirectorios y los subsubsubdirectorios de esa carpeta, para que los vaya comprimiendo, pero sólo me funciona con la primera carpeta del listado, el resto no lo hace y es que no consigo verlo. Alguien me puede ayudar, una vez más muchisimas gracias.
public void comprimirDirectorio(List<string> directorios)
{
//de momento USAMOS ESTE PROCEDIMIENTO
ZipOutputStream zipFile = null;
for (int x = 0; x < directorios.Count; x++)
{
try
{
foreach (string dir in Directory.GetDirectories(directorios[x].ToString()))
{
//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 (Exception ex)
{
//Error Handling
}
finally
{
if (fs != null)
{
fs.Close();
}
}
}
}
}
catch (Exception ex)
{
//Error Handling
}
finally
{
if (zipFile != null)
{
zipFile.Finish();
zipFile.Close();
}
}
}
}
le paso un listado con los subdirecorios y los subsubdirectorios y los subsubsubdirectorios de esa carpeta, para que los vaya comprimiendo, pero sólo me funciona con la primera carpeta del listado, el resto no lo hace y es que no consigo verlo. Alguien me puede ayudar, una vez más muchisimas gracias.
Valora esta pregunta


0