Разбор канонического пути с подстановочными знаками - PullRequest
3 голосов
/ 22 июля 2010

Я пишу функцию C #, которая извлекает некоторые файлы, соответствующие шаблону.

Ввод: C: \ abc * \ abc? \ Testfile. *
Вывод: все файлы соответствуют.

Я думал, что смогу сделать это рекурсией.Но это было нелегко: (

У вас есть хороший алгоритм?

Обновление :
Я сделал это. Спасибо, Кирен:)

void PrintAllFiles(DirectoryInfo currentDir, 
                   string currentPattern, string nextPatten)
{
  DirectoryInfo[] dis = currentDir.GetDirectories(currentPattern);

  if (dis.Length > 0)
  {
    string[] remainPattern = nextPatten.Split("\\".ToCharArray());
    if (remainPattern.Length > 0)
    {
      foreach (DirectoryInfo di in dis)
      {
        PrintAllFiles(di, remainPattern.First(), 
                       string.Join("\\", remainPattern.Skip(1).ToArray()));
      }
    }
  }

  FileInfo[] fis = currentDir.GetFiles(currentPattern);
  foreach (FileInfo fi in fis)
  {
    Console.WriteLine(fi.DirectoryName + "\\" + fi.Name);
  }
}

1 Ответ

3 голосов
/ 22 июля 2010

Самым простым является использование рекурсии; сначала нужно получить базовую папку (C: \), затем передать C:\ в качестве текущего пути, abc* в параметр «текущий шаблон» и abc?\testfile.* в параметр «следующий шаблон».

Если этот метод найдет соответствующую папку, скажем «c: \ abc123»: он снова вызовет метод, с C:\abc123 в качестве текущего пути, abc? в качестве «текущего шаблона» и testfile.* в качестве «Следующие шаблоны».

К тому времени, когда у вас больше не будет подходящих шаблонов, вы можете остановить рекурсию и объявить успех:)

Надеюсь, это поможет.

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