关于文件大小的单位转换
在电脑上, 文件大小为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
[解决办法]
这种问题都不是问题,你单步一下不就可以发现了。要去调试。