就近写一个软件升级的程序,其中必不可少的要进行软件版本号的比较, 圈子里很多同志们都推荐直接使用字符串比较,string.Compare,整个方法给人的感觉就会存在问题,毕竟实践出真理,我还是测试了下,果然发现使用这种方式存在问题,比如用它比较2就比12大,看来此方法不行,研究了下发现如果把其格式都统一了,每段字符长度一样长,就可以进行比较,但是规划到同长度有多了很多麻烦,于是想还是直接截开,进行数字比较,下面是我写的程序,不足的地方,或者有更好的方法,还请高人赐教
'功能:将本地版本号和服务器上的版本号进行比较
'参数:本地版本号,服务器上版本号
'返回值:服务器上新,返回True(需要更新),否则返回False(不需要更新)
'时间:***
Private Function GetIfUpdate(ByVal LocVer As String, ByVal NewVer As String) As Boolean
Try
Dim nLocVer As String() = LocVer.Split(New [Char]() {"."c})
Dim nNewVer As String() = NewVer.Split(New [Char]() {"."c})
Dim newNum As Integer = nNewVer.Length
For nNum As Integer = 0 To newNum - 1
If nLocVer.Length >= NewVer.Length Then
Dim LocV As String = nLocVer(nNum)
Dim newV As String = nNewVer(nNum)
If LocV = "" Or LocV Is Nothing Then
LocV = 0
End If
If newV = "" Or newV Is Nothing Then
newV = 0
End If
If CType(LocV, Long) < CType(newV, Long) Then
Return True
ElseIf CType(LocV, Long) > CType(newV, Long) Then
Return False
End If
Else
If nNum >= nLocVer.Length Then
For nnV As Integer = nNum To nNewVer.Length - 1
Dim Lloc As String = nNewVer(nnV)
If CType(Lloc, Long) <> 0 Then
Return True
End If
Next
Return False
End If
Dim LocV As String = nLocVer(nNum)
Dim newV As String = nNewVer(nNum)
If LocV = "" Or LocV Is Nothing Then
LocV = 0
End If
If newV = "" Or newV Is Nothing Then
newV = 0
End If
If CType(LocV, Long) < CType(newV, Long) Then
Return True
ElseIf CType(LocV, Long) > CType(newV, Long) Then
Return False
End If
End If
Next
Return False
Catch ex As Exception
End Try
End Function