- static void Main(string[] args)
- {
- string dir = @"C:";
- string[] dirs=Directory.GetDirectories(dir);
- long totalSize = 0;
- if(dirs!=null && dirs.Any())
- {
- foreach(string dr in dirs)
- {
- var size = new DirectoryInfo(dr).GetDirectorySize();
- totalSize += size;
- Console.WriteLine($"dir:{dr},size:{size}");
- }
- }
- Console.WriteLine($"totalSize:{totalSize}");
- System.Diagnostics.Debug.WriteLine($"totalSize:{totalSize}");
- }
- static class DirHelper
- {
- public static long GetDirectorySize(this System.IO.DirectoryInfo directoryInfo, bool recursive = true)
- {
- var startDirectorySize = default(long);
- try
- {
-
- if (directoryInfo == null || !directoryInfo.Exists)
- return startDirectorySize; //Return 0 while Directory does not exist.
- //Add size of files in the Current Directory to main size.
- foreach (var fileInfo in directoryInfo.GetFiles())
- System.Threading.Interlocked.Add(ref startDirectorySize, fileInfo.Length);
- if (recursive) //Loop on Sub Direcotries in the Current Directory and Calculate it's files size.
- System.Threading.Tasks.Parallel.ForEach(directoryInfo.GetDirectories(), (subDirectory) =>
- System.Threading.Interlocked.Add(ref startDirectorySize, GetDirectorySize(subDirectory, recursive)));
- //Return full Size of this Directory.
- }
- catch
- {
- }
- return startDirectorySize;
- }
- }
复制代码
- static void DiskDemo()
- {
- string dir = @"C:\Windows";
- string[] dirs = Directory.GetDirectories(dir);
- long totalSize = 0;
- StringBuilder builder = new StringBuilder();
- List<Dir> dirList = new List<Dir>();
- if (dirs != null && dirs.Any())
- {
- foreach (string dr in dirs)
- {
- var size = new DirectoryInfo(dr).GetDirectorySize();
- Dir d = new Dir();
- d.DirName = dr;
- d.DirSize = size;
- dirList.Add(d);
- totalSize += size;
- }
- }
- foreach (var dd in dirList.OrderByDescending(x => x.DirSize))
- {
- System.Diagnostics.Debug.WriteLine(dd);
- Console.WriteLine(dd);
- }
- System.Diagnostics.Debug.WriteLine($"totalSize:{totalSize}");
- }
- class Dir
- {
- public string DirName { get; set; }
- public long DirSize { get; set; }
- public override string ToString()
- {
- return $"DirName:{DirName},DirSize:{DirSize}";
- }
- }
复制代码
|