Formatting a Number of Bytes as a String with Unit

StrFormatByteSize can be used to format a number of bytes as a “human-readable” string. For example, 100,000,000 will be formatted as “95,3 MB” on a de-DE system:

Private Declare Auto Function StrFormatByteSize Lib "shlwapi.dll" ( _
    ByVal qdw As UInt64, _
    ByVal szBuf As String, _
    ByVal uiBufSize As Int32 _
) As IntPtr

Private Function FormatBytes(ByVal Bytes As UInt64) As String
    Dim s As String = Space(256)
    If StrFormatByteSize(Bytes, s, s.Length).Equals(IntPtr.Zero) Then
        Throw New Exception("Conversion failed.")
    Else
        Return Left(s, InStr(s, ControlChars.NullChar) - 1)
    End If
End Function

Usage:

MsgBox(FormatBytes(Convert.ToUInt64("100000000")))
MsgBox(FormatBytes(Convert.ToUInt64("100000000000000")))