【问题标题】:Exclude certain directory names排除某些目录名称
【发布时间】:2015-09-26 14:28:10
【问题描述】:

从目录中获取某些目录名称时如何排除它们? 我目前有:

Dim dir1 As DirectoryInfo() = dir2.GetDirectories()

我尝试了以下示例的变体:

Dim dir1 As DirectoryInfo() = dir2.GetDirectories().Where(Name = Name.Contains("00000000.001"))

试图从我将在其余文件上运行的进程中排除两个文件名。任何建议都会很棒。谢谢!

编辑: Tim 使用此代码提供的测试答案:

Dim direct1 As DirectoryInfo
For Each direct1 In dir1
        ListBox2.Items.Add(direct1.Name)
Next

它显示了我目前试图避免的两个文件名。

【问题讨论】:

  • 所以您想获取或排除所有名称中没有 00000000.001 的目录?
  • 我想排除所有名称中包含 00000000.001 和 00000000.002 的目录
  • 我在下面编辑了我的答案以包括这两种情况。
  • 非常感谢,我会在允许的时候接受答案!

标签: vb.net file-io directory contains directoryinfo


【解决方案1】:

你可以使用 LINQ,因此我更喜欢DirectoryInfo.EnumerateDirectories

来自 MSDN:

EnumerateDirectoriesGetDirectories 方法的不同之处在于 如下:当你使用EnumerateDirectories时,你可以开始 在整个之前枚举DirectoryInfo对象的集合 集合被退回。当你使用GetDirectories时,你必须等待 对于要在之前返回的 DirectoryInfo 对象的整个数组 你可以访问数组。

例如:

Dim dirs As DirectoryInfo() = dir2.EnumerateDirectories().
    Where(Function(dir) dir.Name.Contains("00000000.001")).
    ToArray()

如果您想排除它们,请使用Not ...:

Dim dirs As DirectoryInfo() = dir2.EnumerateDirectories().
    Where(Function(dir) Not dir.Name.Contains("00000000.001")).
    ToArray()

如果要排除多次使用:

Dim exclude = { "00000000.001", "00000000.002" }

Dim dirs As DirectoryInfo() = dir2.EnumerateDirectories().
    Where(Function(dir) Not exclude.Any(Function(d) dir.Name.Contains(d))).
    ToArray()

【讨论】:

  • 这似乎不起作用,我已经编辑了我的原始帖子以显示我运行的代码,它仍然显示了应该被排除的文件目录
  • @Pezzy007:但是您编辑的代码没有使用我的 LINQ 方法。您只是在枚举For Each 中的所有目录。将For Each direct1 In dir1 替换为For Each direct1 In dirsdirs 是我在上面发布的第二种方法。
  • 所以DirectoryInfo() 仍然包含名称包含"00000000.001" 的目录,你能举个例子吗?
  • 嗨蒂姆,对不起,我一直在度假。我收到错误消息“其他信息:创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:未找到类型“String()”的公共成员“Any”。”尝试从搜索中排除多个目录时。
  • @Pezzy007:如果您不能使用像Enumerable.Any 这样的LINQ 方法,那么您要么使用旧的框架/视觉工作室(如2005),要么没有Imports System.Linq。你用的是哪个vs版本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
相关资源
最近更新 更多