c# - 使用通配符解析规范路径

标签 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);
  }
}

最佳答案

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

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

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

希望对您有所帮助。

关于c# - 使用通配符解析规范路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3306445/

相关文章:

c# - 在.NET中在运行时合并自定义配置节

c# - 正则表达式从字符串xx :xx:xx format中提取

c# - CPU、内存使用、线程池使用 - ASP NET core 身份未确认的邮件用户删除处理 - 在应用程序中还是单独的应用程序?

java - AES 算法安全吗?

python - 生成密码列表时出现内存错误

ios - 如何使用Query.limit和Query.skip?

http - 在 TCP 负载之间分割 CRLF

c# - 替换C#中所有目录和文件的名称

algorithm - 主定理扩展案例

javascript - 为 javascript 代码编写解析器