读书人

关于文件大小的单位转换解决方案

发布时间: 2012-01-07 21:41:55 作者: rapoo

关于文件大小的单位转换
在电脑上, 文件大小为1026208 字节的文件显示为0.97 MB
   可我下面的代码1026208 字节的文件显示却为1002.16 KB
需要改那个地方呀,或者还有没有其它的方法可以实现这个文件大小的单位转换
----------
Public Function GetSize(ByVal xGoalSize As Long, ByVal xDecimal As Integer) As String
'xGoalSize 为传入的数(即文件的大小,以B为单位)
'xDecimal 为输出结果的小数位控制
' 1KB=1024B
' 1MB=1024KB
' 1GB=1024MB
' 1TB=1024GB
' 1PB=1024TB
' 1EB=1024PB
' 1ZB=1024EB
' 1YB=1024ZB
' 1NB=1024YB
' 1DB=1024NB
Dim Bx As Double
Dim FSx As Double = Nothing
Dim xDW As String = Nothing
Bx = xGoalSize
Select Case Bx ' FileSizeX.Length
Case Is < 1024 ^ 1
FSx = Bx : xDW = " B"
Case Is < 1024 ^ 2
FSx = Bx / 1024 : xDW = " KB"
Case Is < 1024 ^ 3
FSx = Bx / (1024 ^ 2) : xDW = " MB"
Case Is < 1024 ^ 4
FSx = Bx / (1024 ^ 3) : xDW = " GB"
Case Is < 1024 ^ 5
FSx = Bx / (1024 ^ 4) : xDW = " TB"
Case Is < 1024 ^ 6
FSx = Bx / (1024 ^ 5) : xDW = " PB"
Case Is < 1024 ^ 7
FSx = Bx / (1024 ^ 6) : xDW = " EB"
Case Is < 1024 ^ 8
FSx = Bx / (1024 ^ 7) : xDW = " ZB"
Case Is < 1024 ^ 9
FSx = Bx / (1024 ^ 8) : xDW = " YB"
Case Is < 1024 ^ 10
FSx = Bx / (1024 ^ 9) : xDW = " NB"
Case Is < 1024 ^ 11
FSx = Bx / (1024 ^ 10) : xDW = " DB"
Case Is < 1024 ^ 12
FSx = Bx / (1024 ^ 11) : xDW = "?" '大于DB的单位未知
Case Else
FSx = "?" : xDW = "?"
End Select
Dim xFormat As String = "#.".PadRight(2 + xDecimal, "#")
Return Format(FSx, xFormat) & xDW
End Function

[解决办法]
你代码里

Case Is < 1024 ^ 2
FSx = Bx / 1024 : xDW = " KB"

1024 ^ 2 = 1048576
1026208 字节 < 1048576 字节
当然会显示KB了

除非你另做限定,比如:

VB.NET code
Public Function GetSize(ByVal xGoalSize As Long, ByVal xDecimal As Integer) As String 'xGoalSize 为传入的数(即文件的大小,以B为单位) 'xDecimal 为输出结果的小数位控制         '    1KB=1024B         '    1MB=1024KB         '    1GB=1024MB         '    1TB=1024GB         '    1PB=1024TB         '    1EB=1024PB         '    1ZB=1024EB         '    1YB=1024ZB         '    1NB=1024YB         '    1DB=1024NB         Dim Bx As Double         Dim FSx As Double = Nothing         Dim xDW As String = Nothing         Bx = xGoalSize         Select Case Bx ' FileSizeX.Length             Case Is < 1024 ^ 1 - 2048                FSx = Bx : xDW = " B"             Case Is < 1024 ^ 2 - 2048                FSx = Bx / 1024 : xDW = " KB"             Case Is < 1024 ^ 3 - 2048                FSx = Bx / (1024 ^ 2) : xDW = " MB"             Case Is < 1024 ^ 4 - 2048                FSx = Bx / (1024 ^ 3) : xDW = " GB"             Case Is < 1024 ^ 5 - 2048                FSx = Bx / (1024 ^ 4) : xDW = " TB"             Case Is < 1024 ^ 6 - 2048                FSx = Bx / (1024 ^ 5) : xDW = " PB"             Case Is < 1024 ^ 7 - 2048                FSx = Bx / (1024 ^ 6) : xDW = " EB"             Case Is < 1024 ^ 8 - 2048                FSx = Bx / (1024 ^ 7) : xDW = " ZB"             Case Is < 1024 ^ 9 - 2048                FSx = Bx / (1024 ^ 8) : xDW = " YB"             Case Is < 1024 ^ 10 - 2048                FSx = Bx / (1024 ^ 9) : xDW = " NB"             Case Is < 1024 ^ 11 - 2048                FSx = Bx / (1024 ^ 10) : xDW = " DB"             Case Is < 1024 ^ 12 - 2048                FSx = Bx / (1024 ^ 11) : xDW = "?" '大于DB的单位未知             Case Else                 FSx = "?" : xDW = "?"         End Select         Dim xFormat As String = "#.".PadRight(2 + xDecimal, "#")         Return Format(FSx, xFormat) & xDW     End Function 


[解决办法]
这种问题都不是问题,你单步一下不就可以发现了。要去调试。

读书人网 >VB Dotnet

热点推荐