public static bool CopyDirectoryTree(this DirectoryInfo source, DirectoryInfo dest)
{
bool wasModified = false;
if (!Directory.Exists(dest.FullName))
Directory.CreateDirectory(dest.FullName);
foreach (FileInfo file in source.EnumerateFiles())
{
var fileDest = Path.Combine(dest.ToString(), file.Name);
if (!File.Exists(fileDest))
{
file.CopyTo(fileDest);
wasModified = true;
}
}
foreach (DirectoryInfo subDirectory in source.GetDirectories())
{
var dirDest = Path.Combine(dest.ToString(), subDirectory.Name);
DirectoryInfo newDirectory = dest.CreateSubdirectory(subDirectory.Name);
if (CopyDirectoryTree(subDirectory, newDirectory))
wasModified = true;
}
return wasModified;
}