C# 将路径-C中具有特定值的文件分组#

C# 将路径-C中具有特定值的文件分组#,c#,performance,linq,file,directory-structure,C#,Performance,Linq,File,Directory Structure,我正在创建一个windows应用程序(C#)来构造文件夹中的一些文件。 我的文件夹结构如下 C:/Data/A/A1/d5/Data/abc.xml C:/Data/A/A1/cf/p3.xml C:/Data/A/A2/p1/p2.xml C:/Data/A/A2/m1/m2/cdf.xml C:/Data/A/A3/c1/e1/Data/abc.xml C:/Data/A/A3/ABC/cdf.xml string path = "C:/Data/"; DirectoryInfo dire

我正在创建一个windows应用程序(C#)来构造文件夹中的一些文件。 我的文件夹结构如下

C:/Data/A/A1/d5/Data/abc.xml

C:/Data/A/A1/cf/p3.xml

C:/Data/A/A2/p1/p2.xml

C:/Data/A/A2/m1/m2/cdf.xml

C:/Data/A/A3/c1/e1/Data/abc.xml

C:/Data/A/A3/ABC/cdf.xml

string path = "C:/Data/";

DirectoryInfo directory = new DirectoryInfo(Path);

FileInfo[] files = directory.GetFiles("*.xml", SearchOption.AllDirectories);
我希望得到A1,A2,A3文件夹

我的意图是在A1、A2、A3下创建一个新文件夹,并将所有XML移到那里。 如何在路径中的模式之后获得特定的文件夹名称。
我在文件数组中有上千个xml文件。处理此问题的有效方法是什么?

请注意循环或检查目录是否存在需要多少时间

string path = "C:/Data/A/A";
for (int i = 1; i < 3; i++)
{
    var files = Directory.EnumerateFiles($"{path}{i}", "*.xml", SearchOption.AllDirectories);
    Directory.CreateDirectory($"{path}{i}/new-folder/");
    foreach (var file in files)
    {
        File.Move(file, $"{path}{i}/new-folder/{Path.GetFileName(file)}");
    }
}
string path=“C:/Data/A/A”;
对于(int i=1;i<3;i++)
{
var files=Directory.EnumerateFiles($“{path}{i}”、“*.xml”、SearchOption.AllDirectories);
CreateDirectory($“{path}{i}/newfolder/”;
foreach(文件中的var文件)
{
Move(文件,$“{path}{i}/newfolder/{path.GetFileName(文件)}”);
}
}

那么这有什么用呢?只有三个吗?如果是这样,为什么不分别处理它们呢?会有更多的文件夹。实际情况是否与模式匹配