我会使用 select case 而不是 if。
并且始终从最大的尺寸开始。“我停在 TB 但当然,如果您需要,您可以添加更多......”
我将 Dim TheSize As Integer 更改为“Dim TheSize As ULong ”,否则大数字不起作用。
还要制作一个暗淡的“Dim DoubleBytes As Double”,您将在选择的情况下使用它。
首先,将您拥有的字节与 case 进行比较,比方说 mb "Case 1048576 To 1073741823"
因此,如果是这种情况,请将 TheSize 转换为双精度 "DoubleBytes = CDbl(TheSize / 1048576) 'MB
”
然后在返回中使用 FormatNumber 设置要在 后面显示的数字。 “数字 2 是将其设置为 . 后面的 2,例如 28.11 ,将其更改为 0,它将返回 28”也是因为您知道 mb 您将在返回中添加 & mb 。
“返回格式编号(DoubleBytes, 2) & “MB”
”
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MsgBox(GetFileSize("E:\Software\TeamSpeak3-Client-win64-3.0.14.exe"))
End Sub
Dim DoubleBytes As Double
Public Function GetFileSize(ByVal TheFile As String) As String
If TheFile.Length = 0 Then Return ""
If Not System.IO.File.Exists(TheFile) Then Return ""
'---
Dim TheSize As ULong = My.Computer.FileSystem.GetFileInfo(TheFile).Length
Dim SizeType As String = ""
'---
Try
Select Case TheSize
Case Is >= 1099511627776
DoubleBytes = CDbl(TheSize / 1099511627776) 'TB
Return FormatNumber(DoubleBytes, 2) & " TB"
Case 1073741824 To 1099511627775
DoubleBytes = CDbl(TheSize / 1073741824) 'GB
Return FormatNumber(DoubleBytes, 2) & " GB"
Case 1048576 To 1073741823
DoubleBytes = CDbl(TheSize / 1048576) 'MB
Return FormatNumber(DoubleBytes, 2) & " MB"
Case 1024 To 1048575
DoubleBytes = CDbl(TheSize / 1024) 'KB
Return FormatNumber(DoubleBytes, 2) & " KB"
Case 0 To 1023
DoubleBytes = TheSize ' bytes
Return FormatNumber(DoubleBytes, 2) & " bytes"
Case Else
Return ""
End Select
Catch
Return ""
End Try
End Function
我为它做了一个dll。
然后我可以将它导入到我的项目中,每当我需要将字节数更改为其他“如 mb 等”时,我都可以调用它
FormatBytes(GetHDSizeF) "GetHDSizeF 是字节数"
Dim DoubleBytes As Double
Default Public Property FormatBytes(ByVal BytesCaller As ULong) As String
Get
Try
Select Case BytesCaller
Case Is >= 1099511627776
DoubleBytes = CDbl(BytesCaller / 1099511627776) 'TB
Return FormatNumber(DoubleBytes, 2) & " TB"
Case 1073741824 To 1099511627775
DoubleBytes = CDbl(BytesCaller / 1073741824) 'GB
Return FormatNumber(DoubleBytes, 2) & " GB"
Case 1048576 To 1073741823
DoubleBytes = CDbl(BytesCaller / 1048576) 'MB
Return FormatNumber(DoubleBytes, 2) & " MB"
Case 1024 To 1048575
DoubleBytes = CDbl(BytesCaller / 1024) 'KB
Return FormatNumber(DoubleBytes, 2) & " KB"
Case 0 To 1023
DoubleBytes = BytesCaller ' bytes
Return FormatNumber(DoubleBytes, 2) & " bytes"
Case Else
Return ""
End Select
Catch
Return ""
End Try
End Get
Set(value As String)
End Set
End Property
如果你不想创建 dll,你可以像这样使用普通函数。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MsgBox(FormatBytes(2000))
End Sub
Dim DoubleBytes As Double
Public Function FormatBytes(ByVal BytesCaller As ULong) As String
Try
Select Case BytesCaller
Case Is >= 1099511627776
DoubleBytes = CDbl(BytesCaller / 1099511627776) 'TB
Return FormatNumber(DoubleBytes, 2) & " TB"
Case 1073741824 To 1099511627775
DoubleBytes = CDbl(BytesCaller / 1073741824) 'GB
Return FormatNumber(DoubleBytes, 2) & " GB"
Case 1048576 To 1073741823
DoubleBytes = CDbl(BytesCaller / 1048576) 'MB
Return FormatNumber(DoubleBytes, 2) & " MB"
Case 1024 To 1048575
DoubleBytes = CDbl(BytesCaller / 1024) 'KB
Return FormatNumber(DoubleBytes, 2) & " KB"
Case 0 To 1023
DoubleBytes = BytesCaller ' bytes
Return FormatNumber(DoubleBytes, 2) & " bytes"
Case Else
Return ""
End Select
Catch
Return ""
End Try
End Function