在Subdirectories中查找某个目录

时间:2014-03-18 12:07:09

标签: vb.net file directory find

我想在使用VB.NET的许多子目录中找到一个目录。我有父目录(D:\)的路径,我有子目录(X)的名称,我想在D:\的任何子目录中找到此目录。在D:\我有3个子目录(ABC),我想找X(目录名称){{1} 1}} B A, C`。用VB.NET可以做到吗?

2 个答案:

答案 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)

请检查以下链接 http://msdn.microsoft.com/en-us/library/6ff71z1w%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

它将帮助您获取指定路径中的所有目录。关于第二个参数是“模式”尝试并检查模式为“”并希望返回所有目录和子目录的数组

然后,您可以使用简单的for循环比较/搜索返回的数组列表中的文件名,并显示结果,该结果将显示文件的位置

相关问题