在子目录中找到一个目录



我想在使用VB.NET的许多子目录中找到一个目录。我有父目录(D:)的路径和子目录(X)的名称,我想在D:的任何子目录中找到这个目录。在D:中,我有3个子目录(A, BC),我想在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循环在返回的数组列表中比较/搜索文件名并显示结果,该结果将显示文件所在的位置

相关内容

  • 没有找到相关文章

最新更新