vb.net - 有效的文件名检查。最好的方法是什么?

标签 vb.net

见问题的定位主题。

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

最佳答案

现在旧了,但我看到了这个,只好添加一个新答案。当前接受的答案和其他答案比需要的要复杂得多。事实上,它可以简化为一行:

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

虽然我不建议那样写。稍微分解一下以提高可读性:
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

这里的另一点,通常是处理文件系统问题的最佳方法是让文件系统告诉您:尝试打开或创建有问题的文件,并处理异常。这特别有效,因为无论如何您都可能不得不这样做。您在此处执行的任何其他验证都是重复的工作,您仍然必须将其放入异常处理程序中。

关于vb.net - 有效的文件名检查。最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014242/

相关文章:

c# - 从路径列表填充 TreeView

ASP.net 将 html 编码的代码插入页面

sql - 天数时间总和

asp.net - 在 VB.NET 中重载枚举和属性

mysql - 如何在MySQL查询中进行子聚合排序

c# - VB.NET 能否读取 XML?

vb.net - 通过 VB 中的 API 实现 LINQ 表达式到表达式树

c# - 一个可以在windows任务栏中运行的简单应用程序

c# - 处理异常时 .Net 中的常见编程错误?

vb.net - 将常量数组传递给 VB.NET 中的函数