Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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;
        }