From ed50c4a0ccce99ca20daf7ceb3fc8615c5fdacd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=91=D0=B0=D0=B1=D0=B0=D0=B5=D0=B2?= Date: Tue, 2 Nov 2021 13:42:33 +0300 Subject: [PATCH] 20211102 --- anbs_cp/FileSizeFormatter.cs | 78 ++++++++++++++++++++++++++++++++++++ anbs_cp/TypeConverter.cs | 8 ++-- 2 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 anbs_cp/FileSizeFormatter.cs 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; }