2012-06-27 3 views
1

У меня есть пользовательская форма в 2008 году. Номер детали создается из пользовательского ввода через строку concat. Затем я хочу проверить, существует ли определенная часть номера детали в существующих именах файлов в каталоге. Ниже приведено более подробное объяснение.Как проверить, содержит ли имя файла часть строки в vb.net

Это мой код для создания номера детали с пользовательского ввода в форме.

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 

Здесь мне нужна помощь. Часть no будет выглядеть так: 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)) 

ответ

2

Вот пример того, как вы можете сделать это без фантазии LINQ и лямбда, которые, как представляется, путаю:

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) 
+0

Я получаю следующую ошибку: «EnumerateFiles не является членом System.IO.Directory». Я искал это и обнаружил, что это не работает с визуальной базой 2008 Express Edition net framework 3.5. Это правильно? Могу ли я перейти на net framework 4.0? – UBel

+0

@UBel Я обновил пример, чтобы показать, как вы можете сделать то же самое без новых версий фреймворка. –

+0

Я сделал некоторые изменения и добавил выход, это сработало для меня, спасибо. – UBel

0

Попробуйте это:

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

Считают, что функция подстроки будет сгенерировано исключение, если его аргументы превышает длину строки, она разборе

+0

Это делает lNewFace видимым при любых условиях матча или нет. Некоторые из кода, который я пробовал раньше, создавали бы такой же эффект. Я недостаточно понимаю кодировку, чтобы изменить ее. Я заменяю путь на путь к файлам. мне нужно что-то изменить? Может быть, в «Где (файл функции (файл)» и что означает «FirstOrDefault Is Nothing»? Я пока буду google. – UBel

+0

Это означает «первый результат возвращен или ничего», короче говоря, оператор справа equals вернет true, если совпадение не найдено. Трудно поверить, что он (неправильно) всегда делает ярлык видимым независимо от значения NewFace. Установите некоторые точки останова и проверьте значения переменных (путь, NewFace и т. д.) - вы уверены, что результирующий путь к файлу существует? –

+0

Спасибо за объяснение. Я изменил код от SteveDog и получил то, что мне нужно. Еще раз спасибо. – UBel

Смежные вопросы