Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何递归地将整个目录复制并粘贴到新路径?_C#_File_Directory_Copy Paste - Fatal编程技术网

C# 如何递归地将整个目录复制并粘贴到新路径?

C# 如何递归地将整个目录复制并粘贴到新路径?,c#,file,directory,copy-paste,C#,File,Directory,Copy Paste,我希望通过保持目录的结构不变,将其作为复制/粘贴例程移动。我不仅仅是在目录中的所有子文件夹中查找文件,然后将它们作为解决方案进行复制/粘贴,而是希望克隆整个内容并保持其结构不变,即树->子文件夹和文件,就像复制和粘贴例程一样 所以我找到了一个函数,它可以将一个文件夹中的文件复制到一个新路径: 文件夹->文件 该函数的行为称为复制/粘贴例程。它需要SourcePath、DestinationPath和布尔值来覆盖现有的。很好,很小,但太糟糕了,它没有被标记为该问题的实际答案,因此建议一个比率 但是

我希望通过保持目录的结构不变,将其作为复制/粘贴例程移动。我不仅仅是在目录中的所有子文件夹中查找文件,然后将它们作为解决方案进行复制/粘贴,而是希望克隆整个内容并保持其结构不变,即树->子文件夹和文件,就像复制和粘贴例程一样

所以我找到了一个函数,它可以将一个文件夹中的文件复制到一个新路径:

文件夹->文件

该函数的行为称为复制/粘贴例程。它需要SourcePath、DestinationPath和布尔值来覆盖现有的。很好,很小,但太糟糕了,它没有被标记为该问题的实际答案,因此建议一个比率

但是如果我想移动整个目录呢?换句话说,如果我有一个文件夹,有文件夹的文件夹的文件夹的文件等?可能不知道文件结构树的大小,如下所示:

文件夹->文件夹->…->文件夹->文件

我正在使用下面的例程复制/粘贴包含文件夹的文件夹。但在这里,我知道我只有一个级别的文件夹,因此只需要一个foreach循环:

foreach (var Folder in DestinationFolder) // here I know that I have only one level of folders to reach the files
{
    CopyDirectory(FolderPath, DestinationPath, false); // use that function to copy the files
}
上述功能用于此目录结构:

文件夹->文件夹->文件

我试过了,但没有达到我的目的。我只检索所有文件,而它搜索所有子文件夹。这不是我想要的。我想保持子文件夹和原始结构不变。在这里,我得到了四个文件,而不是原来的目录结构,子文件夹及其子文件夹,子文件夹,文件。只有四个,因为它删除了重复项,我不希望发生这种情况,因为我需要所有的重复项

这是我当前的结构,但我的问题对任何目录都是全局性的:

文件夹->文件夹->文件夹+文件

下面是以下代码在新路径中的作用:

NewFolder->allfilesfundinaysubfolder


如何移动未知大小的整个目录并保持其结构不变?不要只从目录中获取文件并移动它们

下面是一个将一个目录递归克隆到另一个目标目录的示例。将来,在当前问题上添加您尝试过的内容将得到更好的回答

class Program
{
    static void Main(string[] args)
    {
        CloneDirectory(@"C:\SomeRoot", @"C:\SomeOtherRoot");
    }

    private static void CloneDirectory(string root, string dest)
    {
        foreach (var directory in Directory.GetDirectories(root))
        {
            string dirName = Path.GetFileName(directory);
            if (!Directory.Exists(Path.Combine(dest, dirName)))
            {
                Directory.CreateDirectory(Path.Combine(dest, dirName));
            }
            CloneDirectory(directory, Path.Combine(dest, dirName));
        }

        foreach (var file in Directory.GetFiles(root))
        {
            File.Copy(file, Path.Combine(dest, Path.GetFileName(file)));
        }
    }
}

在此上下文中,克隆意味着什么?它与递归地将目录复制到另一个位置有何不同?另外,请粘贴一些代码。你尝试了什么?你的链接问题有两张重新开放的选票。耐心点,给它重新打开的时间,而不是发布该帖子的实际副本。这不是一个即时满足的网站;你不会马上得到答案,如果你一次又一次地发布,也不会有任何帮助。人们确实会去那里。这里有一个审查队列,这就是你获得两张重新开放投票的原因。你告诉Zuxlx的事实在问题中看,你会看到我尝试了什么,表明你已经知道这是一个重复。为了澄清这一点,复制/粘贴是用户在Windows资源管理器中执行的操作。编程解决方案不复制/粘贴;代码创建目录并复制文件。复制问题以链接到原始问题是不正确的行为。你应该做的是编辑原始问题以改进它,这会使它回到问题列表的顶部,引起人们的注意,并让它很快重新打开。这也正是政府说你应该做的。你现在应该做的是编辑这个问题,包括你另一个问题的代码和细节,然后删除另一个问题,以消除混乱。这就是我要找的。这正是我想要的。它将文件夹复制并粘贴到新路径。谢谢
class Program
{
    static void Main(string[] args)
    {
        CloneDirectory(@"C:\SomeRoot", @"C:\SomeOtherRoot");
    }

    private static void CloneDirectory(string root, string dest)
    {
        foreach (var directory in Directory.GetDirectories(root))
        {
            string dirName = Path.GetFileName(directory);
            if (!Directory.Exists(Path.Combine(dest, dirName)))
            {
                Directory.CreateDirectory(Path.Combine(dest, dirName));
            }
            CloneDirectory(directory, Path.Combine(dest, dirName));
        }

        foreach (var file in Directory.GetFiles(root))
        {
            File.Copy(file, Path.Combine(dest, Path.GetFileName(file)));
        }
    }
}