根据选择将目录从源复制到目标

Copy Directory from Source to Destination depending upon selection

我已经实现了如下 CopyDirectoryAndFiles 功能,但它无法正常工作

案例 - 我只想 copy/create NAC -> NAC11 -> NAC12(这是文件夹结构)从源到目标 create/copy NAC11->NAC12 我正在传递源路径,因为 - @"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC 它的最后一部分 (\NAC) 是在 运行 时间从 UI 您要复制的文件夹中选择的,它也可以是多个文件夹,如果我只将路径作为 @"C:\TestArea\Destination\SUP000001041202-01-0002-001 传递,它会从 src->dest 复制所有内容,但我只想要选定的一个..我如何在下面的代码中处理这种情况?

Main() -

    copyDirectory(@"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC"
,                 @"C:\TestArea\Destination\SUP000005150622-1205-0015-M");

Method - 

    private static void copyDirectory(string Source, string destination)
            {
                string[] Files = null;           

                if (destination[destination.Length - 1] != Path.DirectorySeparatorChar)
                {
                    destination += Path.DirectorySeparatorChar;
                }

                if (!Directory.Exists(destination))
                {
                    Directory.CreateDirectory(destination);
                }

                Files = Directory.GetFileSystemEntries(Source);
                foreach (string Element in Files)
                {
                    // Sub directories
                    if (Directory.Exists(Element))
                    {
                        copyDirectory(Element, destination  + Path.GetFileName(Element));
                    }
                    else
                    {
                        // Files in directory
                        File.Copy(Element, destination + Path.GetFileName(Element), true);
                    }
                }

            }

如果我的理解正确,您指定了以下源目录和目标目录:

var source = @"C:\TestArea\Destination\SUP000001041202 - 01 - 0002 - 001\NAC";
var dest = @"C:\TestArea\Destination\SUP000001041202-01-0002-001";

并且您想将 NAC 目录(及其所有内容)从 source 复制到 destination 目录,但问题是 NAC 目录被直接复制到 20041202-01-0002-001 文件夹中,当你真的想要像下面这样的路径结束时(这个 NAC 目录应该与源 NAC目录):

@"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC"

如果是这样,那么你只需要先修改目标目录路径,将源目录的名称添加到其中,如下所示:

destination = Path.Combine(destination, sourceDir.Name);

这是一个应该可以解决问题的代码示例:

private static void CopyDirectory(string source, string destination)
{
    var sourceDir = new DirectoryInfo(source);
    if (!sourceDir.Exists) throw new DirectoryNotFoundException(nameof(source));

    // Add last directory of source to destination and create it
    destination = Path.Combine(destination, sourceDir.Name);
    Directory.CreateDirectory(destination);

    // Copy files from source to destination
    foreach (var file in sourceDir.GetFiles())
    {
        file.CopyTo(Path.Combine(destination, file.Name));
    }

    // Recursively copy sub directories from source to destination
    foreach (var subDir in sourceDir.GetDirectories())
    {
        CopyDirectory(subDir.FullName, destination);
    }
}