首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB Getfiles除外

VB Getfiles除外
EN

Stack Overflow用户
提问于 2022-01-13 07:54:09
回答 2查看 73关注 0票数 0

我希望搜索特定文件夹中的png文件,这些文件不是由给定的模式组成的,并将它们添加到列表框中。所以我想找到名字中没有_norm或_spec的pngs。Paterrn可以大写也可以小写。

文件夹中的文件:

  • a.png
  • a_norm.png
  • a_spec.png
  • a_Spec.png
  • a_Norm.png

希望得到的结果是:

a.png

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-13 09:17:03

对于GetFiles,没有任何选项可以只排除要包含文件的模式,因此必须首先获得符合模式的所有文件,然后才能排除不需要的文件。

下面的方法排除了包含exclusions中提供的字符串之一的文件,并忽略了大小写:

代码语言:javascript
复制
Function ExcludeFiles(files As String(), exclusions As String()) As String()
    Return files.Where(Function(s) Not exclusions.
                 Any(Function(e) s.IndexOf(e, StringComparison.CurrentCultureIgnoreCase) > 0)).
                 ToArray()
End Function

用法:

代码语言:javascript
复制
Sub DoSomething()
    Dim path As String = "C:\WhatEver"
    Dim allPngFiles As String() = System.IO.Directory.GetFiles(path, "*.png")
    Dim filtered As String() = ExcludeFiles(allPngFiles, {"_norm", "_spec"})

    'Do something with the filtered files...
End Sub
票数 0
EN

Stack Overflow用户

发布于 2022-01-13 08:24:40

您不能使用GetFiles进行筛选,因为它只能基于匹配的掩码进行筛选,而不是匹配它。您需要获取所有文件,然后通过适当的String比较丢弃不想要的文件。可能是这样的:

代码语言:javascript
复制
Dim folderPath = "folder path here"
Dim filePaths = Directory.GetFiles("*.png").
                          Where(Function(filePath)
                                    Dim fileName = Path.GetFileNameWithoutExtension(filePath)

                                    Return Not fileName.EndsWith("_norm", StringComparison.InvariantCultureIgnoreCase) AndAlso
                                           Not fileName.EndsWith("_spec", StringComparison.InvariantCultureIgnoreCase)
                                End Function).
                          ToArray()

这假设这些都是你所说的后缀。如果它们可能在名称中的任何位置,那么您可以相应地进行调整。

编辑: LINQ代码可以变得更简洁一些,如下所示:

代码语言:javascript
复制
Dim folderPath = "folder path here"
Dim filePaths = Directory.GetFiles("*.png").
                          Where(Function(filePath) {"_norm", "_spec"}.All(Function(suffix) Not Path.GetFileNameWithoutExtension(filePath).EndsWith(suffix, StringComparison.InvariantCultureIgnoreCase))).
                          ToArray()

不过,对于那些不太熟悉LINQ的人来说,这一点可能不太清楚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70693084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档