解析带有通配符的规范路径

时间:2010-07-22 06:53:54

标签: c# algorithm parsing

我正在编写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 个答案:

答案 0 :(得分:3)

最简单的方法是使用递归;您将首先获得基本文件夹(C:\),然后将C:\作为当前路径,abc*传递给'当前模式'参数,将abc?\testfile.*传递给'下一个模式'参数

如果该方法找到匹配的文件夹,请说'c:\ abc123':它会再次调用该方法,C:\abc123作为当前路径,abc?作为'当前模式',并且testfile.*作为“下一个模式”。

当你没有更多匹配的模式时,你可以停止递归并声明成功:)

希望有所帮助。