-
Notifications
You must be signed in to change notification settings - Fork 0
/
Formatters.cs
90 lines (80 loc) · 2.39 KB
/
Formatters.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
namespace Heic2Whatever
{
public static class Formatters
{
public const long KILOBYTE = 1024;
public const long MEGABYTE = 1048576;
public const long GIGABYTE = 1073741824;
public const long TERABYTE = 1099511627776L;
public const long PETABYTE = 1125899906842624L;
public const long EXABYTE = 1152921504606847000L;
public static string FormatFileSize(long? fileSize)
{
return FormatFileSize(fileSize, 2);
}
public static string FormatFileSize(long? fileSize, int decimalPlaces)
{
return FormatFileSize(fileSize, decimalPlaces, false);
}
public static string FormatFileSize(long? fileSize, int decimalPlaces, bool singleCharacterSuffix)
{
if (fileSize == null)
{
return string.Empty;
}
long divideBy = 1;
string suffix = "";
bool negative = false;
if (fileSize < 0)
{
negative = true;
fileSize *= -1;
}
if (fileSize >= EXABYTE)
{
divideBy = EXABYTE;
suffix = "EB";
}
else if (fileSize >= PETABYTE)
{
divideBy = PETABYTE;
suffix = "PB";
}
else if (fileSize >= TERABYTE)
{
divideBy = TERABYTE;
suffix = "TB";
}
else if (fileSize >= GIGABYTE)
{
divideBy = GIGABYTE;
suffix = "GB";
}
else if (fileSize >= MEGABYTE)
{
divideBy = MEGABYTE;
suffix = "MB";
}
else if (fileSize >= KILOBYTE)
{
divideBy = KILOBYTE;
suffix = "KB";
}
else
{
divideBy = 1;
suffix = "B";
}
if (singleCharacterSuffix)
{
suffix = suffix.Substring(0, 1);
}
double friendlyFileSize = ((double)fileSize) / ((double)divideBy);
if (negative)
{
friendlyFileSize *= -1;
}
return friendlyFileSize.ToString("N" + decimalPlaces.ToString()) + " " + suffix;
}
}
}