/// <summary>Processes a file size by converting it to the appropriate prefix.</summary> /// <param name="bytes">The file size in bytes.</param> /// <param name="byteMultiple">The multiple of bytes.</param> /// <returns>The converted and formatted file size.</returns> public static string Process(long bytes, ByteMultiple byteMultiple) { decimal roundingBytes = bytes; int multiple = 0; switch (byteMultiple) { case ByteMultiple.Binary: multiple = 1024; break; case ByteMultiple.Decimal: multiple = 1000; break; } int prefixCounter = 0; while (Math.Round(roundingBytes / multiple) >= 1) { roundingBytes /= multiple; ++prefixCounter; } roundingBytes = Math.Round(roundingBytes, 0); CultureInfo currentCultureInfo = Thread.CurrentThread.CurrentCulture; string prefix; switch (byteMultiple) { case ByteMultiple.Binary: if (prefixCounter == 0) { prefix = " B"; } else if (prefixCounter == 1) { prefix = " KiB"; } else { prefix = " " + Prefixes[prefixCounter] + "iB"; } break; case ByteMultiple.Decimal: if (prefixCounter == 0) { prefix = " B"; } else { prefix = " " + Prefixes[prefixCounter] + "B"; } break; default: prefix = string.Empty; throw new InvalidEnumArgumentException(byteMultiple.ToString()); } return(roundingBytes.ToString(currentCultureInfo) + prefix); }