0

我是一个新手,并且已经看到 System.IO 可以提供我需要的东西,但我不知道如何解决。我正在使用VB.net

从给定的文件夹开始,例如C:\StartHere我想向下递归文件夹层次结构,查找包含具有给定扩展名的文件的任何文件夹,例如 * .exe。我想建立这些文件夹的列表以供后续处理。

如果有人可以提供帮助,我将不胜感激,因为我不知道解决此问题的最佳方法。

更新

以下提供了 Andrew Morton 要求的更多详细信息。从指定的文件夹开始,我想获取一个列表,其中包含所有包含 EXE 的子文件夹的完整路径。因此呈现以下文件夹...</p>

C:\StartHere\folderA (contains some EXEs)
C:\StartHere\folderB (none in here)
C:\StartHere\Deeper\DeepC (contains some EXEs)
C:\StartHere\Deeper\DeepD (contains some EXEs)
C:\StartHere\Deeper\DeepE (none in here)
C:\StartHere\Deeper\DeepF (contains some EXEs)

该代码将生成一个列表,其中包含:

C:\StartHere\folderA 
C:\StartHere\Deeper\DeepC
C:\StartHere\Deeper\DeepD
C:\StartHere\Deeper\DeepF

在@Tim Schmelter、@Jimi 和@Andrew Morton 的大力帮助下,我现在得到的代码是这样的:

Dim folderList = Directory.EnumerateDirectories("C:\StartHere", "*", SearchOption.AllDirectories).Where(Function(d) Directory.EnumerateFiles(d, "*.exe").Any()).Select(Function(f) Path.GetDirectoryName(f))

运行时,它会创建以下列表;因此它找到了正确的文件夹,但将其父文件夹添加到列表中,而不是完整路径:

C:\StartHere 
C:\StartHere\Deeper
C:\StartHere\Deeper
C:\StartHere\Deeper
4

1 回答 1

1

好吧,有一种方法已经可以满足您的需要:

Dim exeList = IO.Directory.GetFiles("C:\StartHere", "*.exe", IO.SearchOption.AllDirectories).ToList()

编辑:我首先误解了这个问题,所以你想要一个包含至少一个 exe 文件的所有文件夹的列表?您可以使用此 LINQ 查询:

Dim exeDirs = From dir In IO.Directory.EnumerateDirectories("C:\StartHere", "*.*", IO.SearchOption.AllDirectories)
              Where IO.Directory.EnumerateFiles(dir).Any(Function(file) IO.Path.GetExtension(file).Equals(".exe", StringComparison.OrdinalIgnoreCase))
Dim exeDirList As List(Of String) = exeDirs.ToList()
于 2021-07-25T14:02:48.367 回答