如何在vb.net中检查文件名是否包含字符串的一部分

如何在vb.net中检查文件名是否包含字符串的一部分,vb.net,string,filenames,Vb.net,String,Filenames,我在2008年vb快速版中有一个用户表单。通过concat字符串从用户输入创建零件号。然后,我想检查目录中现有文件名中是否存在零件号的某一部分。下面是更详细的解释 这是我从表单上的用户输入创建零件号的代码 L_PartNo.Text = String.Concat(CB_Type.Text, CB_Face.Text, "(", T_Width.Text, "x", T_Height.Text, ")", mount, T_Qty.Text, weep, serv) 然后,我有以下代码来告诉用

我在2008年vb快速版中有一个用户表单。通过concat字符串从用户输入创建零件号。然后,我想检查目录中现有文件名中是否存在零件号的某一部分。下面是更详细的解释

这是我从表单上的用户输入创建零件号的代码

L_PartNo.Text = String.Concat(CB_Type.Text, CB_Face.Text, "(", T_Width.Text, "x", T_Height.Text, ")", mount, T_Qty.Text, weep, serv)
然后,我有以下代码来告诉用户他们刚刚创建的配置(部件号)是否存在

L_Found.Visible = True
If File.Exists("Z:\Cut Sheets\TCS Products\BLANK OUT SIGN\" & (L_PartNo.Text) & ".pdf") Then
        L_Found.Text = "This configuration exists"
      Else
        L_Found.Text = "This configuration does NOT exist"
      End If
这就是我需要帮助的地方。零件号看起来像这个BX002(30x30)A1SS,我想将002(30x30)(只是文件名的这一部分)与一个目录中的所有文件进行比较。我想要一个是或否的答案存在,而不是所有匹配文件的列表。下面的代码是我尝试过的所有代码,不是同时使用的

Dim b As Boolean
b = L_PartNo.Text.Contains(NewFace)

Dim NewFace As String = String.Concat(CB_Face.Text, "(", T_Width.Text, "x", T_Height.Text, ")")
Dim NewFace = L_PartNo.Text.Substring(2, 10)

If filename.Contains(NewFace) Then
        lNewFace.Visible = False
      Else
        lNewFace.Visible = True
      End If
下面的代码是C#中答案的翻译,但也不起作用

Dim contains As Boolean = Directory.EnumerateFiles(path).Any(Function(f) [String].Equals(f, "myfilethree", StringComparison.OrdinalIgnoreCase))

下面是一个例子,说明了如何在没有让你困惑的LINQ和Lambda的情况下完成这项工作:

Public Function FileMatches(folderPath As String, filePattern As String, phrase As String) As Boolean
    For Each fileName As String In Directory.GetFiles(folderPath, filePattern)
        If fileName.Contains(phrase) Then
            Return True
        End If
    Next
    Return False
End Function
或者,如果需要区分大小写:

Public Function FileMatches(folderPath As String, filePattern As String, phrase As String) As Boolean
    For Each fileName As String In Directory.GetFiles(folderPath, filePattern)
        If fileName.ToLower().Contains(phrase.ToLower()) Then
            Return True
        End If
    Next
    Return False
End Function
您可以这样调用该方法:

lNewFace.Visible = FileMatches(path, "*.pdf", NewFace)
试试这个:

 lNewFace.Visible = IO.Directory.GetFiles(path, "*.pdf").Where(Function(file) file. _
            Substring(2, 10) = NewFace).FirstOrDefault Is Nothing

考虑一下,如果子字符串函数的参数超过它正在分析的字符串的长度,则该函数将引发异常

I出现以下错误“EnumerateFiles不是System.IO.Directory的成员”。我在谷歌上搜索了一下,发现这不适用于VisualBasic2008ExpresseditionNetFramework3.5。是这样吗?我可以升级到net framework 4.0吗?@UBel我更新了示例,以展示如何在没有更新版本的框架的情况下执行相同的操作。我做了一些修改,并添加了一个退出,这对我很有效,谢谢。这使lNewFace在任何条件匹配或不匹配的情况下都可见。我以前尝试过的一些代码也会产生同样的影响。我对代码理解不够,无法修改。我用文件的路径替换CD路径。我需要换些别的东西吗?也许在“Where(Function(file)file”中,“FirstOrDefault Is Nothing”是什么意思?我会同时用谷歌搜索。它的意思是“返回第一个结果或什么都没有”;简而言之,如果没有找到匹配项,则等号右侧的语句将返回true。很难相信这是(错误的)无论NewFace的值如何,始终使标签可见。设置一些断点并检查变量的值(路径、NewFace等)-您确定生成的文件路径存在吗?感谢您的解释。我调整了SteveDog的代码,得到了所需的。再次感谢。