This commit is contained in:
Александр Бабаев 2021-11-02 13:42:33 +03:00
parent 3ee973d911
commit ed50c4a0cc
2 changed files with 82 additions and 4 deletions

View File

@ -0,0 +1,78 @@
using System;
namespace anbs_cp
{
/// <summary>
/// Форматирует размер файла/папки в понятную строку
/// </summary>
public static class FileSizeFormatter
{
/// <summary>
/// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
/// </summary>
public static string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
/// <summary>
/// Знаков после запятой
/// </summary>
public static byte DecimalPlaces { get; set; } = 2;
/// <summary>
/// Максимально байт (далее идут Кбайты)
/// </summary>
public static long ByteMax { get; set; } = 1024;
/// <summary>
/// Максимально Кбайт (далее идут Мбайты)
/// </summary>
public static long KByteMax { get; set; } = 1048576;
/// <summary>
/// Максимально Мбайт (далее идут Гбайты)
/// </summary>
public static long MByteMax { get; set; } = 1073741824;
/// <summary>
/// Максимально Гбайт (далее идут Тбайты)
/// </summary>
public static long GByteMax { get; set; } = 1099511627776;
/// <summary>
/// Форматирование размера файла
/// </summary>
/// <param name="value">Размер файла в Байтах</param>
/// <returns>Форматированный размер файла (например, 20 Мб)</returns>
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]}";
}
/// <summary>
/// Деление числа на число с DecimalPlaces знаками после запятой
/// </summary>
/// <param name="dividend">Делимое число</param>
/// <param name="divider">Число-делитель</param>
/// <returns>Частное (с DecimalPlaces знаками после запятой)</returns>
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}";
}
}
}

View File

@ -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;
}