private static void CopyOrUpdateDirectory(DirectoryInfo source, DirectoryInfo target)
{
if (!target.Exists)
{
target.Create();
}
var files = target.GetFiles();
foreach (var file in source.GetFiles())
{
bool fileExists = false;
foreach (var existingFile in files)
{
if (string.Compare(file.Name, existingFile.Name, StringComparison.CurrentCultureIgnoreCase) == 0)
{
//File exists, check to see if source is newer than the destination file
if (file.CreationTime > existingFile.CreationTime || file.LastWriteTime > existingFile.LastWriteTime)
{
//It is newer, so replace
file.CopyTo(Path.Combine(target.FullName, file.Name), true);
}
fileExists = true;
break;
}
}
if (!fileExists)
{
//Didn't exist, copy over the file.
file.CopyTo(Path.Combine(target.FullName, file.Name));
}
}
foreach (var directory in source.GetDirectories())
{
CopyOrUpdateDirectory(directory, new DirectoryInfo(Path.Combine(target.FullName, directory.Name)));
}
}