public static bool DirectoryStatistics( DirectoryInfo dirinfo, bool recursive, out long bytes, out int files, out int subdirs) { bytes = 0; files = 0; subdirs = 0; try { FileInfo[] fis = dirinfo.GetFiles(); files = fis.Length; foreach (FileInfo fi in fis) { bytes += fi.Length; } // Add subdirectory sizes DirectoryInfo[] subdirinfos = dirinfo.GetDirectories(); if (recursive) { foreach (DirectoryInfo subdirinfo in subdirinfos) { subdirs++; long subdirBytes = 0; int subdirFiles = 0; int subdirSubdirectories = 0; if (Common.DirectoryStatistics(subdirinfo, recursive, out subdirBytes, out subdirFiles, out subdirSubdirectories)) { bytes += subdirBytes; files += subdirFiles; subdirs += subdirSubdirectories; } } } else { subdirs = subdirinfos.Length; } return(true); } catch (Exception) { return(false); } }