使用路径中的特定值对文件进行分组-C#

我正在创建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文件。处理此问题的有效方法是什么?

java21710397 回答:使用路径中的特定值对文件进行分组-C#

您可以执行以下操作:

string path = @"d:/Data/A/";

foreach(var dir in Directory.GetDirectories(path))
{
    var files = Directory.EnumerateFiles(dir,"*.xml*",SearchOption.AllDirectories).ToList();
    var newDir = Path.Combine(dir,"YourNewFolederName");

    if (!Directory.Exists(newDir))
        Directory.CreateDirectory(newDir);

    //To copy
    files.ForEach(a => File.Copy(a,Path.Combine(newDir,Path.GetFileName(a)),true));

   //To Move
   files.ForEach(a => File.Move(a,Path.GetFileName(a))));
}

祝你好运。

,

请注意需要循环多少次,或者检查目录是否存在

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)}");
    }
}
本文链接:https://www.f2er.com/3147121.html

大家都在问