Here are some routines that I tried and tested:
public static void CopyAll(string source, string target, string skipFileName)
{
var sourceDi = new DirectoryInfo(source);
var targetDi = new DirectoryInfo(target);
CopyAll(sourceDi, targetDi, skipFileName);
}
public static void CopyAll(DirectoryInfo source, DirectoryInfo target, string skipFileName)
{
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}
foreach (var fileInfo in source.GetFiles())
{
if (fileInfo.Name != skipFileName)
{
Debug.Print(@"Copying {0}\{1}", target.FullName, fileInfo.Name);
fileInfo.CopyTo(Path.Combine(target.ToString(), fileInfo.Name), true);
}
}
foreach (var subDir in source.GetDirectories())
{
if (subDir.Name != target.Name)
{
var nextTargetSubDir = target.CreateSubdirectory(subDir.Name);
CopyAll(subDir, nextTargetSubDir, skipFileName);
}
}
}