代码之家  ›  专栏  ›  技术社区  ›  Bokambo

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

  •  0
  • Bokambo  · 技术社区  · 6 年前

    我已经实现了CopyDirectoryAndFiles功能,如下所示,但它不能正常工作

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

    Main() -
    
        copyDirectory(@"C:\TestArea\Destination\SUP000001\20041202-01-0002-001\NAC"
    ,                 @"C:\TestArea\Destination\SUP000005\20150622-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);
                        }
                    }
    
                }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Rufus L    6 年前

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

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

    你想复制 NAC 目录(及其所有内容) source destination 目录,但问题是 南汽 20041202-01-0002-001 文件夹,当您真的希望以如下路径结束时(以及 南汽 目录):

    @"C:\TestArea\Destination\SUP000001\20041202-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);
        }
    }
    
    推荐文章