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)<?:namespace prefix = o ns = "urn:schemas-microsoft-comfficeffice" />
{
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.