diff --git a/anbs_cp/FileSizeFormatter.cs b/anbs_cp/FileSizeFormatter.cs
new file mode 100644
index 0000000..a3ed3e2
--- /dev/null
+++ b/anbs_cp/FileSizeFormatter.cs
@@ -0,0 +1,78 @@
+using System;
+namespace anbs_cp
+{
+ ///
+ /// Форматирует размер файла/папки в понятную строку
+ ///
+ public static class FileSizeFormatter
+ {
+ ///
+ /// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
+ ///
+ public static string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
+ ///
+ /// Знаков после запятой
+ ///
+ public static byte DecimalPlaces { get; set; } = 2;
+ ///
+ /// Максимально байт (далее идут Кбайты)
+ ///
+ public static long ByteMax { get; set; } = 1024;
+ ///
+ /// Максимально Кбайт (далее идут Мбайты)
+ ///
+ public static long KByteMax { get; set; } = 1048576;
+ ///
+ /// Максимально Мбайт (далее идут Гбайты)
+ ///
+ public static long MByteMax { get; set; } = 1073741824;
+ ///
+ /// Максимально Гбайт (далее идут Тбайты)
+ ///
+ public static long GByteMax { get; set; } = 1099511627776;
+ ///
+ /// Форматирование размера файла
+ ///
+ /// Размер файла в Байтах
+ /// Форматированный размер файла (например, 20 Мб)
+ public static string Format(long value)
+ {
+ //Bytes
+ if (value < ByteMax)
+ return $"{value} {SizeNames[0]}";
+ //KiloBytes
+ if ((value >= ByteMax) && (value < KByteMax))
+ return $"{FrmtSize(value, ByteMax)} {SizeNames[1]}";
+ //MegaBytes
+ if ((value >= KByteMax) && (value < MByteMax))
+ return $"{FrmtSize(value, KByteMax)} {SizeNames[2]}";
+ //GigaBytes
+ if ((value >= MByteMax) && (value < GByteMax))
+ return $"{FrmtSize(value, MByteMax)} {SizeNames[3]}";
+ //TeraBytes
+ if (value >= GByteMax)
+ return $"{FrmtSize(value, GByteMax)} {SizeNames[4]}";
+ //Не определён
+ return $"{value} {SizeNames[0]}";
+ }
+ ///
+ /// Деление числа на число с DecimalPlaces знаками после запятой
+ ///
+ /// Делимое число
+ /// Число-делитель
+ /// Частное (с DecimalPlaces знаками после запятой)
+ private static string FrmtSize(long dividend, long divider)
+ {
+ long delim = 1;
+
+ for (int i = 0; i <= DecimalPlaces; i++)
+ {
+ delim *= 10;
+ }
+
+ decimal value = Math.Round((decimal)(dividend * delim / divider)) / delim;
+
+ return $"{value}";
+ }
+ }
+}
\ No newline at end of file
diff --git a/anbs_cp/TypeConverter.cs b/anbs_cp/TypeConverter.cs
index 1909928..f5485b8 100644
--- a/anbs_cp/TypeConverter.cs
+++ b/anbs_cp/TypeConverter.cs
@@ -4,19 +4,19 @@
{
public static string IntToStr(int AInt) => AInt.ToString();
public static string IntToStr(long AInt) => AInt.ToString();
- public static int StrToInt(string AStr)
+ public static int StrToInt(string AStr, int ADefault = 0)
{
if (!int.TryParse(AStr, out int result))
{
- result = 0;
+ result = ADefault;
}
return result;
}
- public static long StrToInt64(string AStr)
+ public static long StrToInt64(string AStr, long ADefault = 0)
{
if (!long.TryParse(AStr, out long result))
{
- result = 0;
+ result = ADefault;
}
return result;
}