我在2008 vb express edition中有一个userform。部件号是通过连接字符串从用户输入创建的。我想检查目录中现有文件名中是否存在部件号的某个部分。以下是更详细的解释。
这是我的代码,用于从表单上的用户输入创建部件号。
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))
答案 0 :(得分:3)
这是一个如何在没有花哨的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)
答案 1 :(得分:0)
试试这个:
lNewFace.Visible = IO.Directory.GetFiles(path, "*.pdf").Where(Function(file) file. _
Substring(2, 10) = NewFace).FirstOrDefault Is Nothing
如果子字符串函数的参数超出了它正在解析的字符串的长度,则认为它会引发异常