|  |  | 
              
              | 
                  | Title | Format a BIG number of bytes in KB, MB, GB, TB, etc. by using an array of postfixes | 
|---|
 | Description | This example shows how to format a BIG number of bytes in KB, MB, GB, TB, etc. by using an array of postfixes in Visual Basic 6. | 
|---|
 | Keywords | format, bytes, KB, MB, GB | 
|---|
 | Categories | API, Files and Directories | 
|---|
 |  | 
 |  | Thanks to Dougal Morrison. 
Unfortunately the StrFormatByteSize API function (click here for an example) uses long integers to store byte values so it can only handle up to 2,147,483,647 bytes or a bit less than 2 GB. Modern computers often work with values greater than 2 GB and in some cases more than 1 TB (1 terabyte = 1024 gigabytes).
 
The Numeric2Bytes function makes an array of the postfixes (MB, GB, etc.) for different powers of 1024 and then finds the one that is appropriate. It formats the value with two digits to the right of the decimal place, using the correct 
               |  | 
 |  
                | ' Returns string with binary notation of b bytes,
' rounded to 2 decimal places , eg
' 123="123 Bytes", 2345="2.29 KB",
' 1234567="1.18 MB", etc
' b : double : numeric to convert
Function Numeric2Bytes(ByVal b As Double)
Dim bSize(8) As String
Dim i As Integer
   bSize(0) = "Bytes"
   bSize(1) = "KB" 'Kilobytes
   bSize(2) = "MB" 'Megabytes
   bSize(3) = "GB" 'Gigabytes
   bSize(4) = "TB" 'Terabytes
   bSize(5) = "PB" 'Petabytes
   bSize(6) = "EB" 'Exabytes
   bSize(7) = "ZB" 'Zettabytes
   bSize(8) = "YB" 'Yottabytes
   b = CDbl(b) ' Make sure var is a Double (not just
       ' variant)
   For i = UBound(bSize) To 0 Step -1
      If b >= (1024 ^ i) Then
         Numeric2Bytes = CStr(Round(b / (1024 ^ i), 2)) & " " & _
             "" & bSize(i)
         Exit For
      End If
   Next
End Function |  | 
 |  | See also: 
 |  |  |  |   |  |  |  |  |