Skip to content

Instantly share code, notes, and snippets.

@jijiechen
Last active May 10, 2016 14:40
Show Gist options
  • Save jijiechen/8c64c734987ed5451a3f14a39412c7bf to your computer and use it in GitHub Desktop.
Save jijiechen/8c64c734987ed5451a3f14a39412c7bf to your computer and use it in GitHub Desktop.
Copy or move a directory into destination directory and merge their contents
public static void MergeDirectories(string sourceDir, string destDir, bool moveMode = false, bool overwriteMode = false)
{
if (!Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}
var dir = new DirectoryInfo(sourceDir);
foreach (var file in dir.GetFiles())
{
var destFileName = Path.Combine(destDir, file.Name);
if (overwriteMode && File.Exists(destFileName))
{
File.Delete(destFileName);
}
if (moveMode)
{
file.MoveTo(destFileName);
}
else {
file.CopyTo(destFileName);
}
}
foreach (var subDir in dir.GetDirectories())
{
var destDirName = Path.Combine(destDir, subDir.Name);
if (Directory.Exists(destDirName))
{
MergeDirectory(subDir.FullName, destDirName, moveMode, overwriteMode);
if (moveMode)
{
subDir.Delete();
}
}
else
{
if (moveMode)
{
subDir.MoveTo(destDirName);
}
else {
MergeDirectory(subDir.FullName, destDirName, false, overwriteMode);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment