为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
吃鸡游戏 2022-06-19 16:37:30
我已经实现了如下 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 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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


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

    }

}


查看完整回答
反对 回复 2022-06-19
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信