首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2012-01-07 
关于文件大小的单位转换在电脑上, 文件大小为1026208 字节的文件显示为0.97 MB  可我下面的代码1026208 字

关于文件大小的单位转换
在电脑上, 文件大小为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 


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

热点排行