Copy a directory and contents (recursively) to a new location, optionally overwriting the destination contents.
public static void Copy(string sourceDirectoryPath, string destinationDirectoryPath, bool overwriteFiles = false, bool recursive = true)
{
var sourceDirectory = new DirectoryInfo(sourceDirectoryPath);
if (!sourceDirectory.Exists)
{
throw new ArgumentException("Source directory not found on file system.", nameof(sourceDirectoryPath));
}
var destinationDirectoryFullPath = Path.GetFullPath(destinationDirectoryPath);
if (destinationDirectoryFullPath != sourceDirectory.FullName)
{
Directory.CreateDirectory(destinationDirectoryFullPath);
var files = sourceDirectory.GetFiles();
foreach (var file in files)
{
var newFilePath = Path.Combine(destinationDirectoryFullPath, file.Name);
if (overwriteFiles || !File.Exists(newFilePath))
{
File.Copy(file.FullName, newFilePath, overwriteFiles);
}
}
var subDirectories = sourceDirectory.GetDirectories();
foreach (var directory in subDirectories)
{
var newDirectoryPath = Path.Combine(destinationDirectoryFullPath, directory.Name);
if (recursive)
{
Copy(directory.FullName, newDirectoryPath, overwriteFiles);
}
else
{
Directory.CreateDirectory(newDirectoryPath);
}
}
}
}