HEJlbCOH
@HEJlbCOH
Программист C#

C# .Net Как изменить имя и расширение в другой папке?

Написал скриптик на изменение имени и расширение файла (Смотрите в низу), он как надо преобразует все эти файлы, но вот проблема, если в папке лежите ещё одна папка а там другие файлы то скрипт не может обратиться к папке и так же изменить имя и расширение вложенных туда файлов, как исправить данную проблемку? Заранее благодарю.

Script C# .Net

int i = 0;
string name = @"C:\Путь";
DirectoryInfo dir = new DirectoryInfo (name);
foreach(var item in dir.GetFiles()){
File.Move (item.FullName, name + "test_" + i.ToString() + ".pp");
i++;
}
  • Вопрос задан
  • 404 просмотра
Решения вопроса 1
@Sumor
Как-то так, рекурсивно:

string name = @"C:\Путь";
DirectoryInfo dir = new DirectoryInfo (name);
ChangeNameRecursive(dir);


void ChangeNameRecursive(DirectoryInfo dir)
{
  int i = 0;
  foreach(var item in dir.GetFiles())
  {  
    File.Move (item.FullName, name + "test_" + i.ToString() + ".pp");
    i++;
  }
  foreach(var d in dir.GetDirectories())
  {  
    if(d.Name == "." || d.Name == "..") continue;
    ChangeNameRecursive(d);
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@xD_Antlion
static void ChangeNameRecursive(DirectoryInfo dir)
{
  int i = 0;
  foreach(var item in dir.GetFiles())
  {  
    File.Move (item.FullName, $"{name} test_ {i.ToString()} {".pp"}");
    i++;
  }
  foreach(var d in dir.GetDirectories())
  {  
    if(d.Name == "." || d.Name == "..") 
    {
       continue;
    }
    ChangeNameRecursive(d);
  }
}

Вызывать так:
private readonly string name = @"C:\Путь";
// const PATH = @"C:\Путь";
ChangeNameRecursive(new DirectoryInfo (name));
Ответ написан
Комментировать
ApeCoder
@ApeCoder
Во-первых, для скриптиков есть специальный язык - powershell и на нем задача решается примерно так:

ls "C:\Путь" -r  -attr !directory | %{ mv $_.FullName ($name + "test_" + $i++ + ".pp")  }


Во-ыторых, есть целая статья с разными способами обхода вложенных папок:

  • System.IO.SearchOption.AllDirectories
  • рекурсия
  • стек или очередь для обхода дерева директорий ф цикле
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы