解析带有通配符的规范路径
我正在编写C#函数,它检索一些匹配模式的文件。
输入:C:\ abc * \ abc?\ testfile。*
输出:匹配所有文件。
我以为我可以通过递归来实现。 但这并不容易:(
你有一个很好的算法吗?
更新 :
我做到了。 谢谢Kieren 🙂
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*
传递给’current pattern’参数,将abc?\testfile.*
传递给’next patterns’参数。
如果该方法找到了匹配的文件夹,比如’c:\ abc123’:它会再次调用该方法,使用C:\abc123
作为当前路径, abc?
作为’当前模式’,和testfile.*
作为’下一个模式’。
当你没有更多模式匹配时,你可以停止递归并声明成功:)
希望有所帮助。
- 如何检查与.NET,C#和WPF的Internet连接
- WinForms的免费或开源图表组件
- UserControl等效于MVC3?
- 如何防止XXE攻击(.net中的XmlDocument)
- 确定参数是否在C#中使用reflection使用“params”?
- 更改NUnit测试的名称
- 当VirtualizingStackPanel.IsVirtualizing =“False”时,ItemContainerGenerator.ContainerFromItem()返回null
- 将System.Windows.Media.ImageSource转换为System.Drawing.Bitmap
- 我可以使用正则表达式来查找X的索引吗?