猿问

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

我已经实现了如下 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);

                    }

                }


            }


吃鸡游戏
浏览 121回答 1
1回答

慕妹3146593

如果我理解正确,您指定了以下源目录和目标目录:var source = @"C:\TestArea\Destination\SUP000001\20041202 - 01 - 0002 - 001\NAC";var dest = @"C:\TestArea\Destination\SUP000001\20041202-01-0002-001";并且您想将NAC目录(连同它的所有内容)从目录复制source到destination目录,但问题是NAC目录的内容被直接复制到20041202-01-0002-001文件夹中,而您真的想得到如下路径(并且此NAC目录应与源NAC目录相同):@"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);    }}
随时随地看视频慕课网APP
我要回答