-
Notifications
You must be signed in to change notification settings - Fork 1
/
Info.cs
50 lines (48 loc) · 1.55 KB
/
Info.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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BackUpDesktop
{
internal class Info
{
public static long DirSize(DirectoryInfo d)
{
long size = 0;
try
{
FileInfo[] fis = d.GetFiles();
foreach (FileInfo fi in fis)
{
size += fi.Length;
}
}
catch { }
try
{
DirectoryInfo[] dis = d.GetDirectories();
foreach (DirectoryInfo di in dis)
{
size += DirSize(di);
}
}
catch { }
return size;
}
public static string SizeSuffix(Int64 value, int decimalPlaces = 1)
{
string[] SizeSuffixes = { "bytes", "KB", "MB", "GB" };
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); }
int mag = (int)Math.Log(value, 1024);
decimal adjustedSize = (decimal)value / (1L << (mag * 10));
if (Math.Round(adjustedSize, decimalPlaces) >= 1000)
{ mag += 1; adjustedSize /= 1024; }
return string.Format("{0:n" + decimalPlaces + "} {1}",
adjustedSize,
SizeSuffixes[mag]);
}
}
}