См. тему для постановки вопроса.
1) Я вспоминаю, что в VB.NET используется действительно классная опция, использующая LINQ для сопоставления с использованием "LIKE%"
2) Я знаю, что регулярные выражения будут работать, и я подозреваю, что это приведет к кратчайшему коду и, вероятно, не будет слишком трудно читать для такого простого теста.
Вот что я сделал. Предупреждение: вы будете ненавидеть.
Private Shared Function FileNameIsOk(ByVal fileName As String) As Boolean
For Position As Integer = 0 To fileName.Length - 1
Dim Character As String = fileName.Substring(Position, 1).ToUpper
Dim AsciiCharacter As Integer = Asc(Character)
Select Case True
Case Character = "_" 'allow _
Case Character = "." 'allow .
Case AsciiCharacter >= Asc("A") And AsciiCharacter <= Asc("A") 'Allow alphas
Case AsciiCharacter >= Asc("0") AndAlso AsciiCharacter <= Asc("9") 'allow digits
Case Else 'otherwise, invalid character
Return False
End Select
Next
Return True
End Function