我想在使用VB.NET的许多子目录中找到一个目录。我有父目录(D:
)的路径和子目录(X
)的名称,我想在D:
的任何子目录中找到这个目录。在D:
中,我有3个子目录(A
, B
和C
),我想在A,
B or
C '中找到X
(目录名称)。有可能用VB.NET做到这一点吗?
您可以使用Directory.EnumerateDirectories
方法这样做,如下所示:
For Each i As String In Directory.EnumerateDirectories("D:", "X", SearchOption.AllDirectories)
Console.WriteLine("Matching Directory: " & i)
Next
请注意可能有多个匹配。另外,请注意,如果目录树非常大,该方法可能需要很长时间才能找到所有匹配项。对您来说,关键是SearchOption.AllDirectories
选项。通过传递AllDirectories
,该方法将搜索"D:"
以下的整个目录树。如果省略该参数,或者传递TopDirectoryOnly
,它将只查看直接属于"D:"
的子目录。它不会搜索所有的后代。
如果您只想获得所有匹配目录的数组,您可以选择使用Directory.GetDirectories
方法:
Dim matches() As String = Directory.GetDirectories("D:", "X", SearchOption.AllDirectories)
If matches.Length > 0 Then
Console.WriteLine("First match: " & matches(0))
End If
但是,EnumerateDirectories
方法的优点是,如果您只关心第一个匹配,则可以在处理第一个匹配后退出循环,并跳过搜索目录树的其余部分。来自MSDN文章:
EnumerateDirectories和GetDirectories方法的不同之处在于:当你使用EnumerateDirectories时,你可以在返回整个集合之前开始枚举名称集合;当您使用GetDirectories时,您必须等待整个名称数组返回,然后才能访问该数组。因此,当您处理许多文件和目录时,EnumerateDirectories可以更有效。
例如,如果您真的只关心第一个匹配,那么这样做会更有效:
For Each i As String In Directory.EnumerateDirectories("D:", "X", SearchOption.AllDirectories)
Console.WriteLine("First match: " & i)
Exit For
Next
或使用LINQ:
Dim firstMatch As String = Directory.EnumerateDirectories("D:", "X", SearchOption.AllDirectories).FirstOrDefault()
If firstMatch IsNot Nothing Then
Console.WriteLine(firstMatch)
End If
请查看以下链接http://msdn.microsoft.com/en-us/library/6ff71z1w%28v=vs.110%29.aspx?cs-save-lang=1& cs-lang = vb # code-snippet-1
它将帮助您获得指定路径下的所有目录。关于第二个参数,即"pattern",尝试将pattern检查为",并希望返回所有目录和子目录的数组
然后你可以使用简单的for循环在返回的数组列表中比较/搜索文件名并显示结果,该结果将显示文件所在的位置