private static void LogDuplicates(StreamWriter writer, DirectoryInfo directory, Settings settings) { Console.WriteLine(" {0}", directory.FullName); var map = new Dictionary<string, Dictionary<string, string>>(); var writeDirectoryName = true; foreach (var file in directory.GetFiles()) { var ext = GetFileExtension(file); var hash = GetFileHash(file); if (map.ContainsKey(ext)) { var duplicate = GetFileDuplicate(hash, map[ext]); if (!string.IsNullOrEmpty(duplicate)) { if (writeDirectoryName) { writer.WriteLine(directory.FullName); writeDirectoryName = false; } writer.WriteLine(" {0}\t\t\t\t{1}", file.Name, duplicate); Console.WriteLine(" ====> {0} duplicates {1}", file.Name, duplicate); } else { AddFileToExtMap(hash, file, map[ext]); Console.WriteLine(" {0}", file.Name); } } else { var extMap = new Dictionary<string, string>(); AddFileToExtMap(hash, file, extMap); map.Add(ext, extMap); } } writer.Flush(); if (settings.IncludeSubdirectories) { foreach (var subDirectory in directory.GetDirectories()) { LogDuplicates(writer, subDirectory, settings); } } }
private static Settings GetSettings(string[] args) { var settings = new Settings(); try { foreach (var arg in args) { var tokens = arg.Split(':'); if (tokens.Length != 2) return null; switch (tokens[0]) { case "-s": settings.SearchDirectory = tokens[1].Replace("\"", ""); break; case "-d": settings.LogFileDirectory = tokens[1].Replace("\"", ""); break; case "-n": settings.LogFileName = tokens[1].Replace("\"", ""); break; case "-i": settings.IncludeSubdirectories = bool.Parse(tokens[1]); break; case "-o": settings.OverwriteLog = bool.Parse(tokens[1]); break; default: return null; } } } catch (Exception) { return null; } return settings; }