我想在使用VB.NET的许多子目录中找到一个目录。我有父目录(D:\
)的路径,我有子目录(X
)的名称,我想在D:\
的任何子目录中找到此目录。在D:\
我有3个子目录(A
,B
和C
),我想找X
(目录名称){{1} 1}} B A,
C`。用VB.NET可以做到吗?
答案 0 :(得分:1)
您可以使用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 article:
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
答案 1 :(得分:0)
它将帮助您获取指定路径中的所有目录。关于第二个参数是“模式”尝试并检查模式为“”并希望返回所有目录和子目录的数组
然后,您可以使用简单的for循环比较/搜索返回的数组列表中的文件名,并显示结果,该结果将显示文件的位置