2010-07-22 75 views
3

我正在编写检索某些文件匹配模式的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

而不是'“\\”'你应该使用'Path.DirectorySeparatorChar' – Oliver 2010-07-22 12:23:44

+0

同意。但是在盒子里代表太长了。 – Benjamin 2010-07-22 13:35:21

回答

3

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

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

通过你没有更多的模式相匹配的时候,你可以停止递归和申报成功:)

希望有所帮助。