我是新手,已经看到 System.IO 可以提供我需要的东西,但我不知道如何。我正在使用VB.net
从给定的文件夹开始,例如C:\StartHere我想向下递归文件夹层次结构,查找包含具有给定扩展名的文件的任何文件夹,例如 * .exe。我想建立这些文件夹的列表以供后续处理。
如果有人可以提供帮助,我将不胜感激,因为我不知道解决这个问题的最佳方法。
更新
以下提供了安德鲁·莫顿 (Andrew Morton) 要求的更多详细信息。从指定的文件夹开始,我想获得一个包含所有包含 EXE 的子文件夹的完整路径的列表。所以出现了以下文件夹......
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
好吧,有一种方法可以满足您的需求:
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句