ProjectTreeNode AddExstingDirectory(DirectoryInfo source, DirectoryInfo target, ProjectTreeNode parentNode, bool recursive) { ProjectTreeNode node = null; string targetName = target.Name; foreach (ProjectTreeNode child in parentNode.Nodes) { if (child.Text.ToLower() == targetName.ToLower()) { node = child; break; } } if (node == null) { node = parentNode.AddFolder(targetName); } // Check if the target directory exists, if not, create it. if (Directory.Exists(target.FullName) == false) { Directory.CreateDirectory(target.FullName); } // Copy each file into it’s new directory. foreach (FileInfo fi in source.GetFiles()) { string targetFile = Path.Combine(target.ToString(), fi.Name); node.AddFile(fi.Name); if (!System.IO.File.Exists(targetFile)) { fi.CopyTo(targetFile, false); } } if (recursive) { // Copy each subdirectory using recursion. foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); AddExstingDirectory(diSourceSubDir, nextTargetSubDir, node, recursive); } } return(node); }