C# 创建文件夹结构的副本

C# 创建文件夹结构的副本,c#,directory,C#,Directory,我有以下几种文件夹结构: c:\temp\project\folder1\folder2(这个目录是动态的,我的意思是可以有更多或更少的文件夹) 我想创建这个结构的阴影,在每个目录中增加2个文件夹,如 C:\temp\projectNew\folder1(在folder1下我想再创建两个文件夹,存档文件夹和未处理)\folder2(在folder2下我想再创建两个文件夹,存档文件夹和未处理) 这是我的尝试 var sourcePath = @"C:\\temp\\project"; var pa

我有以下几种文件夹结构: c:\temp\project\folder1\folder2(这个目录是动态的,我的意思是可以有更多或更少的文件夹)

我想创建这个结构的阴影,在每个目录中增加2个文件夹,如

C:\temp\projectNew\folder1(在folder1下我想再创建两个文件夹,存档文件夹和未处理)\folder2(在folder2下我想再创建两个文件夹,存档文件夹和未处理)

这是我的尝试

var sourcePath = @"C:\\temp\\project";
var parentDirectorty = Directory.GetParent(folderPath);

var sourceDirectoryName = folderPath.Replace(Path.GetDirectoryName(folderPath) + Path.DirectorySeparatorChar, "");
var firstDestiDirectoryName = Directory.CreateDirectory($@"{parentDirectorty}\{sourceDirectoryName}new");
但不知道如何获取其他文件夹的名称并在每个目录中创建存档和未处理的文件夹


对不起,我的英语很糟糕。

将所有可用目录转储到字符串数组:

string[] directories = Directory.GetDirectories("C:\\temp\\project", "*", SearchOption.AllDirectories);
然后循环它:

for(int i = 0; i<directories.Length; i++)
{
    string newPath = directories[i].Replace("C:\\temp\\project\\", "C:\\temp\\projectNEW\\");
    Directory.CreateDirectory(newPath);
}

for(int i=0;i将所有可用目录转储到字符串数组:

string[] directories = Directory.GetDirectories("C:\\temp\\project", "*", SearchOption.AllDirectories);
然后循环它:

for(int i = 0; i<directories.Length; i++)
{
    string newPath = directories[i].Replace("C:\\temp\\project\\", "C:\\temp\\projectNEW\\");
    Directory.CreateDirectory(newPath);
}

for(int i=0;i使用
GetDirectories
获取给定路径的所有目录和子目录路径

接下来,为每个路径添加文件夹

public void XXXX(string path)
{
    string[] directories = Directory.GetDirectories(path, "*", SearchOption.AllDirectories);

    directories.ForEach(x=> AddNewFolders(x));
}

public void AddNewFolders(string path)
{
      var archivedFoldeer = Path.Combine(path,"Archive");
      if (!Directory.Exists(archivedFoldeer )      
           Directory.CreateDirectory(archivedFoldeer );
      //var notProcesssedFoldeer = Path.Combine(path,"NotProcessed");
}

使用
GetDirectories
获取给定路径的所有目录和子目录路径

接下来,为每个路径添加文件夹

public void XXXX(string path)
{
    string[] directories = Directory.GetDirectories(path, "*", SearchOption.AllDirectories);

    directories.ForEach(x=> AddNewFolders(x));
}

public void AddNewFolders(string path)
{
      var archivedFoldeer = Path.Combine(path,"Archive");
      if (!Directory.Exists(archivedFoldeer )      
           Directory.CreateDirectory(archivedFoldeer );
      //var notProcesssedFoldeer = Path.Combine(path,"NotProcessed");
}


好的,你需要在主文件夹下找到文件夹,然后搜索这些文件夹以获得更多的文件夹等,并建立树,直到你到达它的底部。因为你不知道结构的深度,你需要使用递归。我想在.NET framework中已经有一些方法和类可以帮助你做到这一点,我不知道我现在没有时间查看细节,但我相信如果你愿意,你可以搜索它。如果你不了解递归技术,也可以研究递归。因此,用不同的措辞来回答你的问题;你有一个“根”文件夹,在本例中是它的项目。在该文件夹中,有文件夹,在每个文件夹及其所有子文件夹中,你想创建更多文件夹吗?你说得对@WynDieselSorry@WynDiesel我误解了你的解释。我想创建另一个目录。像Project一样,可以将新目录命名为projectNew并创建所有子目录在该项目New folderWell下,您需要获取主文件夹下的文件夹,然后搜索这些文件夹以获取更多文件夹等,并建立树,直到到达树的底部。由于您不知道结构的深度,因此需要使用递归。我想在.NET framework中已经有一些方法和类可以我可以帮你,我现在没有时间查找细节,但我相信如果你愿意,你可以搜索它。如果你不知道递归技术,也可以研究递归。所以,用不同的措辞提问;你有一个“根”文件夹,在本例中是它的项目。在该文件夹中,有文件夹,在每个文件夹及其所有子文件夹中,你想创建更多文件夹吗?你说得对@WynDieselSorry@WynDiesel我误解了你的解释。我想创建另一个目录。像Project一样,可以将新目录命名为projectNew并创建所有子目录在该projectNew folderEither下,我对这个问题的理解是错误的,或者这不是正确的答案-它意味着是一个卷影副本,因此:c:\temp\project\应该复制到c:\temp\projectNew\。这个答案将它得到的每个路径与“存档”结合起来。这意味着它不会在“项目”外部创建字典,而是在“项目”内部创建“存档”目录it@MaKiPL,我同意。OP的问题不清楚。他们提到了“副本”,但从示例来看,它似乎不是副本,只是在子目录中创建新文件夹,除非这两个文件夹存在于根文件夹中?@MaKiPL我从我的角度理解这个问题。也许我错了。让OP决定:)@MaKiPL您是对的,我想创建一个新目录在这种情况下,我的父目录是project,我想创建另一个文件夹并将其命名为projectNew,创建project文件夹的所有子目录并再创建两个文件夹。如果我理解错了这个问题,或者这不是正确的答案,那么这就是shadow copy,因此:c:\temp\project\应复制到c:\temp\projectNEW\。此答案将其获得的每个路径与“存档”相结合。这意味着它不会在“项目”外创建字典,而是在“项目”内创建“存档”目录it@MaKiPL,我同意。OP的问题不清楚。他们提到了“副本”,但从示例来看,它似乎不是副本,只是在子目录中创建新文件夹,除非这两个文件夹存在于根文件夹中?@MaKiPL我从我的角度理解这个问题。也许我错了。让OP决定:)@MaKiPL你是对的,我想创建一个新目录在这种情况下,我的父目录是project,我想创建另一个文件夹并将其命名为projectNew,创建project文件夹的所有子目录,并创建另外两个文件夹我没有向下投票,但有一个AIK SearchOption.AllDirectory只查找直接子目录,而不是一路递归下去?至少是这样implies@ADyson刚刚测试,它创建了多达6个目录树(.NET 4.5.2)很高兴知道,谢谢。在这种情况下,您的代码看起来非常整洁,所以请进行投票。@MaKiPL它工作得很好。我已经用8个目录测试了它。非常感谢你。CheersI没有进行向下投票,但是AFAIK SearchOption.AllDirectory只查找直接的子目录,而不是在树下递归?至少是这样implies@ADyson刚刚测试,它创建了多达6个目录树(.NET 4.5.2)很高兴知道,谢谢。在这种情况下,您的代码看起来非常整洁,所以请进行投票。@MaKiPL它工作得很好。我已经用8个目录测试了它。非常感谢你。干杯