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