static long GetFolderSize(Folder folder) { var currentDirFilesSize = folder.Files.Sum(f => f.Size); long folderSize = currentDirFilesSize; foreach (var childFolder in folder.ChildFolders) { folderSize += GetFolderSize(childFolder); } return folderSize; }
private static Folder[] GetFoldersInDir(string path) { var directoryInfo = new DirectoryInfo(path).GetDirectories(); List<Folder> folders = new List<Folder>(); foreach (var dir in directoryInfo) { string subFolderPath = path + "\\" + dir.Name; var currentDirInfo = new DirectoryInfo(subFolderPath); Folder currentFolder = new Folder(currentDirInfo.Name, GetFilesInDir(subFolderPath), GetFoldersInDir(subFolderPath)); folders.Add(currentFolder); } return folders.ToArray(); }
static void PrintDirectoryTree(Folder[] tree) { foreach (var folder in tree) { Console.WriteLine("> " + folder.Name + " [" + GetFolderSize(folder)/1000 + "kb]"); foreach (var file in folder.Files) { Console.WriteLine("--- {0} - {1} kb", file.Name, file.Size / 1000); } foreach (Folder subfolder in folder.ChildFolders) { Folder[] tempFolder = {subfolder}; PrintDirectoryTree(tempFolder); } } }
public Folder(string name, File[] files, Folder[] subFolders) { this.Name = name; this.Files = files; this.ChildFolders = subFolders; }