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