【发布时间】:2021-03-04 20:21:49
【问题描述】:
我有一个包含文件和目录信息的 IEnumerable - 下面是它的内容示例:-
我想从此 IEnumerable 中提取特定信息,并假设 LINQ 是最佳途径
我想要给定路径中的文件列表和单独的目录列表 - 但只是那个级别,所以不包括子目录等
所以如果我通过 C:\ 那么它只返回 C:\ 根目录中的文件列表和 C:\ 根目录中的目录列表 - 仅 1 级。如果我通过 C:\Windows 则它返回 C:\Windows 根目录中的文件列表和 C:\Windows 中的目录列表 - 再次只是给定的级别,没有更低(或更高)
列表只需要包含每个文件/目录的全名即可
如果是目录,则 Attributes 值包含 Directory,因此我可以使用它来轻松确定文件或目录是否使用类似于下面的内容
Dim dirs2 = nodes.Where(Function(n) n.FullName.StartsWith(path) And n.Attributes = Attributes.Directory)
Dim files2 = nodes.Where(Function(n) n.FullName.StartsWith(path) And n.Attributes <> Attributes.Directory)
但我被困在如何只返回 FullName 值 - 以及 - 如何只返回一个级别
下面链接的示例项目显示了使用 NTFSreader link 填充 IEnumerable 的确切方式
注意我想继续使用 Ntfs 阅读器,而不是使用 IO.Directory.GetDirectories / GetFiles,因为 NTFS 阅读器要快得多,并且没有相同的权限问题,因为它直接从 MFT 获取信息
http://www.pcassistonline.co.uk/upload/test_source.zip
这里有人有什么想法吗?在 Google 和其他论坛上花了几个小时,但在这里不知所措 - 谢谢
【问题讨论】:
-
如果您只需要
FullName属性,请选择它。Dim dirs2 = nodes.Where(Function(n) n.FullName.StartsWith(path) AndAlso n.Attributes = Attributes.Directory).Select(Function(n) n.FullName)。对于顶层部分,回到你得到nodes的地方,该方法应该有某种方式来指示它。检查过载可能。
标签: vb.net linq ienumerable