diff --git a/EgwCoreLib.Utils/FileHelpers.cs b/EgwCoreLib.Utils/FileHelpers.cs new file mode 100644 index 0000000..cc94800 --- /dev/null +++ b/EgwCoreLib.Utils/FileHelpers.cs @@ -0,0 +1,50 @@ +namespace EgwCoreLib.Utils +{ + /// + /// Utility per gestione Files + /// + public class FileHelpers + { + #region Public Fields + + public static readonly string[] SizeSuffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; + + #endregion Public Fields + + #region Public Methods + + /// + /// Calcola dimensione file con corretta unità di misura secondo dimensione + /// + /// lunghezza file (in byte) + /// Num di cifre decimali richieste + /// + /// + public static string SizeSuffix(Int64 value, int decimalPlaces = 1) + { + if (decimalPlaces < 0) { throw new ArgumentOutOfRangeException("decimalPlaces"); } + if (value < 0) { return "-" + SizeSuffix(-value, decimalPlaces); } + if (value == 0) { return string.Format("{0:n" + decimalPlaces + "} bytes", 0); } + + // mag is 0 for bytes, 1 for KB, 2, for MB, etc. + int mag = (int)Math.Log(value, 1024); + + // 1L << (mag * 10) == 2 ^ (10 * mag) [i.e. the number of bytes in the unit + // corresponding to mag] + decimal adjustedSize = (decimal)value / (1L << (mag * 10)); + + // make adjustment when the value is large enough that it would round up to 1000 or more + if (Math.Round(adjustedSize, decimalPlaces) >= 1000) + { + mag += 1; + adjustedSize /= 1024; + } + + return string.Format("{0:n" + decimalPlaces + "} {1}", + adjustedSize, + SizeSuffixes[mag]); + } + + #endregion Public Methods + } +} \ No newline at end of file