48 lines
1.2 KiB
C#
48 lines
1.2 KiB
C#
namespace Finch.Extensions;
|
|
|
|
public static class NumberExtensions
|
|
{
|
|
static Dictionary<FileSizeNotation, string[]> FileSizeUnits = new()
|
|
{
|
|
{ FileSizeNotation.SI, new string[] { "B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" } },
|
|
{ FileSizeNotation.IEC, new string[] { "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB" } },
|
|
{ FileSizeNotation.JEDEC, new string[] { "B", "KB", "MB", "GB" } }
|
|
};
|
|
|
|
public static int Limit(this int input, int min, int max)
|
|
{
|
|
if (input < min)
|
|
{
|
|
return min;
|
|
}
|
|
if (input > max)
|
|
{
|
|
return max;
|
|
}
|
|
return input;
|
|
}
|
|
|
|
|
|
public static string GetFileSize(this long sizeInBytes, FileSizeNotation notation = FileSizeNotation.JEDEC)
|
|
{
|
|
if (!FileSizeUnits.ContainsKey(notation))
|
|
{
|
|
throw new NotImplementedException($"The notation {notation} has no implementation for generating human-readable file sizes");
|
|
}
|
|
|
|
int power = notation == FileSizeNotation.SI ? 1000 : 1024;
|
|
|
|
string[] units = FileSizeUnits[notation];
|
|
|
|
int order = 0;
|
|
|
|
while (sizeInBytes >= power && order + 1 < units.Length)
|
|
{
|
|
order++;
|
|
sizeInBytes = sizeInBytes / power;
|
|
}
|
|
|
|
return String.Format("{0:0.##} {1}", sizeInBytes, units[order]);
|
|
}
|
|
}
|