How to format bytes to human readable file size in C# and VB.NET

Sample C#

public static String FormatToHumanReadableFileSize(object value)
{
    try
    {
        string[] suffixNames = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
        var counter = 0;
        decimal dValue = 0;
        Decimal.TryParse(value.ToString(), out dValue);
        while (Math.Round(dValue / 1024) >= 1)
        {
            dValue /= 1024;
            counter++;
        }
 
        return string.Format("{0:n1} {1}", dValue, suffixNames[counter]);
    }
    catch(Exception ex)
    {
        //catch and handle the exception
        return string.Empty;
    }
}

Sample Vb.Net

Public Shared Function FormatToHumanReadableFileSize(value As Object) As [String]
        Try
            Dim suffixNames As String() = {"bytes", "KB", "MB", "GB", "TB", "PB", _
                "EB", "ZB", "YB"}
            Dim counter = 0
            Dim dValue As Decimal = 0
            Decimal.TryParse(value.ToString(), dValue)
            While Math.Round(dValue / 1024) >= 1
                dValue /= 1024
                counter += 1
            End While
 
            Return String.Format("{0:n1} {1}", dValue, suffixNames(counter))
        Catch ex As Exception
            'catch and handle the exception
            Return String.Empty
        End Try
    End Function