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);
        }