Vb.net 在子目录中的某处查找目录

Vb.net 在子目录中的某处查找目录,vb.net,file,directory,find,Vb.net,File,Directory,Find,我想使用VB.NET在许多子目录中找到一个目录。我有父目录的路径(D:\)和子目录的名称(X),我想在D:\的任何子目录中找到此目录。在D:\中,我有3个子目录(A、B和C),我想在A、B或C>中找到X(目录名称)。使用VB.NET可以做到这一点吗?您可以使用以下方法: For Each i As String In Directory.EnumerateDirectories("D:\", "X", SearchOption.AllDirectories) Console.WriteL

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

您可以使用以下方法:

For Each i As String In Directory.EnumerateDirectories("D:\", "X", SearchOption.AllDirectories)
    Console.WriteLine("Matching Directory: " & i)
Next
请注意,可能存在多个匹配项。另外,请注意,如果目录树非常大,则该方法可能需要很长时间才能找到所有匹配项。为您工作的关键是
SearchOption.AllDirectories
选项。通过传递
所有目录
,该方法将搜索
“D:\”
下面的整个目录树。如果您省略了该参数,或者传递了
TopDirectoryOnly
,它将只查看直接属于
“D:\”的子目录。它不会搜索所有的后代

如果您只想获取所有匹配目录的数组,也可以使用以下方法:

然而,
EnumerateDirectories
方法的优点是,如果只关心第一个匹配,则可以在处理第一个匹配后退出循环,并跳过搜索目录树的其余部分。从:

EnumerateDirectory和GetDirectories方法的区别如下:使用EnumerateDirectory时,可以在返回整个集合之前开始枚举名称集合;使用GetDirectory时,必须等待返回整个名称数组,然后才能访问该数组。因此,当您处理许多文件和目录时,枚举目录可以更有效

例如,如果你真的只关心第一场比赛,那么这样做会更有效率:

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

请查看下面的链接

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


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

您发布的内容自上次我选中以来非常详细:)如果可以,我会再次给您+1。@user3432981没问题。如果这回答了您的问题,您应该单击复选框将其标记为正确答案。
Dim firstMatch As String = Directory.EnumerateDirectories("D:\", "X", SearchOption.AllDirectories).FirstOrDefault()
If firstMatch IsNot Nothing Then
    Console.WriteLine(firstMatch)
End If