【发布时间】:2019-09-05 21:42:56
【问题描述】:
我有以下函数,当它打开文件以建立文件类型时,它不会返回正确的值。我做错了什么?
前 8 个字符采用这种格式 %PDF-1.4
Function GetFileType(xFile As String) As Boolean
Dim fileBytes As Byte()
fileBytes = System.IO.File.ReadAllBytes(xFile)
Dim s As String
s = System.Text.Encoding.UTF8.GetString(fileBytes)
Select Case s
Case s.Substring(1, 3) = "PDF"
GetFileType = False
Case Else
GetFileType = True
End Select
End Function
它与 case 语句不匹配,它总是移动到让我难过的 else 部分。
【问题讨论】:
-
使用调试器并查看值。
-
我用过调试器,值看起来正确!
-
Select Case s.Substring(1, 3)Case "PDF" -
VB.NET 实际上并不支持这种 Case 语句语法。 Option Strict On 允许编译器告诉你它。请考虑一个简单的 If 语句。
-
对于文件签名检测,最好进行逐字节比较。除了更可靠(转换为 UTF-8 可能会导致您不关心的无效字符)之外,您不必读取整个文件来确定这 8 个字节是否与签名匹配。打开一个
FileStream,最多读取8个字节,然后比较(与签名的ASCII字符作为字节值的字符)。
标签: vb.net