Os dejo un procedimiento que encontré (no se donde...) y que utilicé una vez para copiar el contenido de una carpeta en otra.
DirectoryInfo origen = new DirectoryInfo(@"C:\Origen");
DirectoryInfo destino = new DirectoryInfo(@"C:\Destino");
CopyDirectory(origen, destino);
static void CopyDirectory(DirectoryInfo origen, DirectoryInfo destino)
{
if (!destino.Exists)
{
destino.Create();
}
FileInfo[] files = origen.GetFiles();
foreach (FileInfo file in files)
{
file.CopyTo(Path.Combine(destino.FullName,file.Name));
}
// Subcarpetas
DirectoryInfo[] dirs = origen.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
string destinoDir = Path.Combine(destino.FullName, dir.Name);
// llamada recusriva
CopyDirectory(dir, new DirectoryInfo(destinoDir));
}
}
DirectoryInfo destino = new DirectoryInfo(@"C:\Destino");
CopyDirectory(origen, destino);
static void CopyDirectory(DirectoryInfo origen, DirectoryInfo destino)
{
if (!destino.Exists)
{
destino.Create();
}
FileInfo[] files = origen.GetFiles();
foreach (FileInfo file in files)
{
file.CopyTo(Path.Combine(destino.FullName,file.Name));
}
// Subcarpetas
DirectoryInfo[] dirs = origen.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
string destinoDir = Path.Combine(destino.FullName, dir.Name);
// llamada recusriva
CopyDirectory(dir, new DirectoryInfo(destinoDir));
}
}
Para ello se ha usado el método CopyTo y una llamada recursiva para copiar también todas las subcarpetas contenidas en el directorio origen.