Vb.net 版本字符串部分太短或太长
我正在用VB.Net检查一些EXE文件的版本号 这是我在网上找到的代码:Vb.net 版本字符串部分太短或太长,vb.net,version,Vb.net,Version,我正在用VB.Net检查一些EXE文件的版本号 这是我在网上找到的代码: Public Class Form1 '\\ Pulls the file version out of the exe properties Private Function GetFileVersionInfo(ByVal filename As String) As Version Return Version.Parse(FileVersionInfo.GetVersionInfo
Public Class Form1
'\\ Pulls the file version out of the exe properties
Private Function GetFileVersionInfo(ByVal filename As String) As Version
Return Version.Parse(FileVersionInfo.GetVersionInfo(filename).ProductVersion)
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("Version: " + GetFileVersionInfo("C:\Users\jborg\SkyDrive Pro\Client Software\Malware Tools\HitmanPro.exe").ToString)
End Sub
End Class
代码运行得很好,代码中列出的EXE的EXCEPT
它给了我以下错误:
以下是工作文件和非工作文件之间的文件详细信息:
EXE有什么问题吗?我为什么会出现这个错误?或者有更好的方法打印文件版本号吗?我不确定您在这个故事中的位置,但是如果
Parse
在某些方面失败,您可以使用TryParse
至少避免异常:
Dim str = FileVersionInfo.GetVersionInfo(fname).ProductVersion()
If Version.TryParse(str, ver) = False Then
...
End If
您还可以为任何无效、缺失或可能违反的片段提供自己的解析器和默认值:
Dim ver As New Version()
If Version.TryParse(str, ver) = False Then
Dim parts = str.Split("."c)
ver = New Version(
If(parts.Length >= 1, ValueOrDefault(parts(0)), 0),
If(parts.Length >= 2, ValueOrDefault(parts(1)), 0),
If(parts.Length >= 3, ValueOrDefault(parts(2)), 0),
If(parts.Length >= 4, ValueOrDefault(parts(3)), 0)
)
End If
' a helper function to
' get the int value of a string or 0 if "too long or too short"
Private Function ValueOrDefault(str As String) As Integer
Dim n As Integer
If Int32.TryParse(str, n) Then
' trap for values < 0
Return If(n < 0, 0, n)
' or: Return If(n < 0, 0 - n, n)
Else
Return 0
End If
End Function
Dim ver As New Version()
如果Version.TryParse(str,ver)=False,则
尺寸部件=结构拆分(“.”c)
版本=新版本(
如果(parts.Length>=1,则值默认值(parts(0)),0),
如果(parts.Length>=2,则值默认值(parts(1)),0),
如果(parts.Length>=3,则值默认值(parts(2)),0),
如果(parts.Length>=4,则值默认值(parts(3)),0)
)
如果结束
'一个帮助函数
'获取字符串的int值,如果“太长或太短”,则获取0
私有函数valuerDefault(str作为字符串)作为整数
作为整数的Dim n
如果Int32.TryParse(str,n)那么
'值小于0的陷阱
返回If(n<0,0,n)
'或:如果(n<0,0-n,n)返回
其他的
返回0
如果结束
端函数
给定一个段过大的字符串:vstr=“1.4359733459374957394.6.7.8”
,结果是“1.0.6.7”
。跳过第二个过大的值,并使用默认值0
对于
“1”
,结果为“1.0.0.0”
;对于“Hello,World!”或任何其他非数字或空字符串,结果为0.0.0
坏字符串中的实际字符串是什么?它看起来有空格或嵌入的东西。实际字符串应该是“产品版本”,但是,如果我使用“文件版本”,它没有空格,我会得到相同的错误。那么这是什么状态?