Добавление суффикса номера при создании папки в C # - PullRequest
4 голосов
/ 29 января 2012

Я пытаюсь обработать, если папка, которую я хочу создать, уже существует ... чтобы добавить число к имени папки ... как проводник Windows .. например (Новая папка, Новая папка 1, Новая папка 2 ..) как я могу сделать это рекурсивно я знаю, что этот код неверен. Как я могу исправить или, возможно, изменить код ниже, чтобы решить проблему?

    int i = 0;
    private void NewFolder(string path)
    {
        string name = "\\New Folder";
        if (Directory.Exists(path + name))
        {
            i++;
            NewFolder(path + name +" "+ i);
        }
        Directory.CreateDirectory(path + name);
    }

Ответы [ 4 ]

6 голосов
/ 29 января 2012

Для этого вам не нужна рекурсия, но вместо этого следует искать итеративное решение

private void NewFolder(string path) {
  string name = @"\New Folder";
  string current = name;
  int i = 0;
  while (Directory.Exists(Path.Combine(path, current)) {
    i++;
    current = String.Format("{0} {1}", name, i);
  }
  Directory.CreateDirectory(Path.Combine(path, current));
}
1 голос
/ 25 октября 2012

Вы можете использовать этот расширитель DirectoryInfo:

public static class DirectoryInfoExtender
{
    public static void CreateDirectory(this DirectoryInfo instance)
    {
        if (instance.Parent != null)
        {
            CreateDirectory(instance.Parent);
        }
        if (!instance.Exists)
        {
            instance.Create();
        }
    }
}
1 голос
/ 26 июня 2012

Самый простой способ сделать это:

        public static void ebfFolderCreate(Object s1)
        {
          DirectoryInfo di = new DirectoryInfo(s1.ToString());
          if (di.Parent != null && !di.Exists)
          {
              ebfFolderCreate(di.Parent.FullName);
          }

          if (!di.Exists)
          {
              di.Create();
              di.Refresh();
          }
        }
1 голос
/ 31 января 2012
    private void NewFolder(string path) 
    {
        string name = @"\New Folder";
        string current = name;
        int i = 0;
        while (Directory.Exists(path + current))
        {
            i++;
            current = String.Format("{0} {1}", name, i);
        }
        Directory.CreateDirectory(path + current);
    }

кредит за @ JaredPar

...