2010-07-22 30 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.*爲「下一個模式」 。

通過你沒有更多的模式相匹配的時候,你可以停止遞歸和申報成功:)

希望有所幫助。