using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace FullDirectoryTraverse { class FullDirTraverse { const string directory = @"../../"; static string outputdir = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); static void WriteFiles(string dir) // write all files in a given directory { List allFiles = new DirectoryInfo(dir).GetFiles().ToList(); var sortedFiles = allFiles.OrderBy(file => file.Length).GroupBy(file => file.Extension).OrderByDescending(group => group.Count()).OrderBy(group => group.Key); using (var resultWriter = new StreamWriter(outputdir + @"/log.txt", true)) { foreach(var group in sortedFiles) { resultWriter.WriteLine(group.Key); foreach (var pair in group) { resultWriter.WriteLine("name: {0} -- size: {1} bytes ", pair.Name, pair.Length); } } } } static void DirectorySearch(string dirPath) // recursion { WriteFiles(dirPath); // first write all file in a given Directory try { foreach(string dir in Directory.GetDirectories(dirPath)) // get all directories from the folder { WriteFiles(dir); DirectorySearch(dir); // try the recursion for each of them. } } catch(SystemException exception) { Console.WriteLine(exception.Message); } } static void Main() { DirectorySearch(directory); } } }