public static void CopyRecursive(string source, string destination) {
if (File.GetAttributes(source).HasFlag(FileAttributes.Directory)) {
Directory.CreateDirectory(destination);
foreach (var dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) {
Directory.CreateDirectory(Path.Combine(destination, GetRelativePath(dirPath, source)));
}
foreach (var filePath in Directory.GetFiles(source, "*", SearchOption.AllDirectories)) {
File.Copy(filePath, Path.Combine(destination, GetRelativePath(filePath, source)), true);
}
} else {
File.Copy(source, destination, true);
}
}