StrFormatByteSize (shlwapi)
Last changed: FallenGameR-75.165.13.109

.
Summary
Converts a numeric value into a string that represents the number expressed as a size value in bytes, kilobytes, megabytes, or gigabytes, depending on the size. It's the same format as the Windows Explorer.

C# Signature:

[DllImport ( "Shlwapi.dll", CharSet = CharSet.Auto )]
public static extern long StrFormatByteSize (
        long fileSize
        , [MarshalAs ( UnmanagedType.LPTStr )] StringBuilder buffer
        , int bufferSize );

C# Signature (one line):

[DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]
public static extern long StrFormatByteSize( long fileSize, System.Text.StringBuilder buffer, int bufferSize );

VB Signature:

<System.Runtime.InteropServices.DllImport("shlwapi", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function StrFormatByteSize
        (
         ByVal fileSize As Long, _
         ByVal buffer As Text.StringBuilder, _
         ByVal bufferSize As Integer
        ) As Long
End Function

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

C#

/// <summary>
/// Converts a numeric value into a string that represents the number expressed as a size value in bytes, kilobytes, megabytes, or gigabytes, depending on the size.
/// </summary>
/// <param name="filelength">The numeric value to be converted.</param>
/// <returns>the converted string</returns>
public static string StrFormatByteSize (long filesize) {
     StringBuilder sb = new StringBuilder( 11 );
     StrFormatByteSize( filesize, sb, sb.Capacity );
     return sb.ToString();
}

VB

''' <summary>
''' Returns a string representation of a number of bytes (ie. 524288 = "512Kb")
''' </summary>
Private Function fnFileSize( ByVal size As Long ) As String
     Dim sb As New Text.StringBuilder( 20 )
     StrFormatByteSize( size, sb, sb.Capacity )
     Return sb.ToString()
End Function        

Powershell

$nativeMethods = Add-Type -PassThru -Name "Win32Api" -MemberDefinition @"
     [DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]
     public static extern long StrFormatByteSize( long fileSize, System.Text.StringBuilder buffer, int bufferSize );
"@
$sb = New-Object Text.StringBuilder 100
$nativeMethods::StrFormatByteSize( 1024, $sb, $sb.Capacity ) | Out-Null
$sb.ToString()

Documentation