我想知道掃描具有不確定字符的目錄的好方法是什麼。如何使用特定子目錄的通配符掃描目錄
例如,我想掃描
C:\程序\版本2 * \文件
含義
- 該文件夾位於
C:\Program
Version2.*
可以是任何類似Version2.33
,Version2.1
等- 該文件夾中有一個名爲
Files
文件夾中它
我知道我可以做類似foreach (directory) if contains("Version2.")
,但我想知道是否有這樣做的更好的方法。
我想知道掃描具有不確定字符的目錄的好方法是什麼。如何使用特定子目錄的通配符掃描目錄
例如,我想掃描
C:\程序\版本2 * \文件
含義
C:\Program
Version2.*
可以是任何類似Version2.33
,Version2.1
等Files
文件夾中它我知道我可以做類似foreach (directory) if contains("Version2.")
,但我想知道是否有這樣做的更好的方法。
Directory.EnumerateDirectories接受搜索模式。所以枚舉具有通配符家長和比枚舉休息:
var directories =
Directory.EnumerateDirectories(@"C:\Program\", "Version2.*")
.SelectMany(parent => Directory.EnumerateDirectories(parent,"Files"))
注:如果路徑可以包含在任何級別的通配符 - 只需正常化路徑,並通過「\」拆,不是由一級收集文件夾級別。
是否有一個使用EnumerateDirectories而不是GetDirectories的原因? – Default
@Default EnumerateDirectories使用延遲評估,因此對於大量文件/文件夾可能會更快(MSDN [鏈接]的檢查備註部分(http://msdn.microsoft.com/en-us/library/dd383572(v = vs .100).aspx)) –
這似乎最適合我目前正在尋找的(: 我會盡快試一試,謝謝! –
試試這個
var pattern = new Regex(@"C:\\Program\\Version 2(.*)\\Files(.*)");
var directories = Directory.EnumerateDirectories(@"C:\Program", "*",
SearchOption.AllDirectories)
.Where(d => pattern.IsMatch(d));
+1。可以工作,但可能會找到更多的直接方法 - 將需要額外的稍後過濾 –
你說得對,當然我的答案中添加了過濾 –
您是否嘗試過[Directory.GetFiles功能(http://msdn.microsoft.com/en-us/library/wz42302f.aspx)?我不確定是否會包含多個目錄,但是它具有'*'作爲通配符 – Default
可能的重複:http://stackoverflow.com/questions/7286477/possible-to-specify-directory-path-with-a-通配符 – Default
@默認情況下,當通配符位於路徑的末尾時,該答案很有用,而不是中間的,似乎是在這個問題中。 –