请参阅提出问题的主题.
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
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 14
现在老了,但我看到了这个,只需添加一个新的答案.当前接受和其他答案比需要的更复杂.实际上,它可以简化为一行:
Public Shared Function FilenameIsOK(ByVal fileName as String) as Boolean
Return Not (Path.GetFileName(fileName).Intersect(Path.GetInvalidFileNameChars()).Any() OrElse Path.GetDirectoryName(fileName).Intersect(Path.GetInvalidPathChars()).Any())
End Function
Run Code Online (Sandbox Code Playgroud)
虽然我不建议这样写.稍微分解一下以提高可读性:
Public Shared Function FilenameIsOK(ByVal fileName as String) as Boolean
Dim file As String = Path.GetFileName(fileName)
Dim directory As String = Path.GetDirectoryName(fileName)
Return Not (file.Intersect(Path.GetInvalidFileNameChars()).Any() _
OrElse _
directory.Intersect(Path.GetInvalidPathChars()).Any())
End Function
Run Code Online (Sandbox Code Playgroud)
另一点是,处理文件系统问题的最佳方法通常是让文件系统告诉您:只是尝试打开或创建有问题的文件,并处理异常.这种方法效果特别好,因为无论如何你都可能必须这样做.你在这里做的任何事情都是重复的工作,你仍然需要把它放到一个异常处理程序中.
Bob*_*ing 10
如何Path.GetInvalidFileNameChars和Path.GetInvalidPathChars?
Public Shared Function FilenameIsOK(ByVal fileNameAndPath as String) as Boolean
Dim fileName = Path.GetFileName(fileNameAndPath)
Dim directory = Path.GetDirectoryName(fileNameAndPath)
For each c in Path.GetInvalidFileNameChars()
If fileName.Contains(c) Then
Return False
End If
Next
For each c in Path.GetInvalidPathChars()
If directory.Contains(c) Then
Return False
End If
Next
Return True
End Function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30146 次 |
| 最近记录: |