Сгруппируйте файлы с определенным значением в пути - C # - PullRequest
0 голосов
/ 07 ноября 2019

Я создаю приложение 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-файлов в массиве файлов. Как эффективно это обработать?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Знайте, сколько времени нужно зациклить или, возможно, проверить, существует каталог или нет

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)}");
    }
}
0 голосов
/ 07 ноября 2019

Вы могли бы сделать что-то вроде этого:

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.Combine(newDir,Path.GetFileName(a))));
}

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...