Beispiel #1
0
        static void Main(string[] args)
        {
            Config config = new Config();
            IFileMonitorDataAccess dataAccess = new SimulatedDatabase(config);


            string scanroot = System.Configuration.ConfigurationManager.AppSettings["ScanRoot"];
            var    files    = new List <string>();

            Console.WriteLine("Generating List of files ...");
            Console.WriteLine();
            foreach (string f in Directory.GetFiles(scanroot, "*", SearchOption.AllDirectories))
            {
                files.Add(f);
                Console.Write(".");
            }
            Console.WriteLine();
            Console.WriteLine(files.LongCount() + " files discovered.");
            Console.WriteLine("Generating Hashes ...");
            Console.WriteLine();

            IHashGenerator gen = new Sha1HashGenerator();

            foreach (string filePath in files)
            {
                try
                {
                    if (!dataAccess.FileAlreadyHashed(filePath))
                    {
                        FileInfo fileInfo = new FileInfo(filePath);

                        string hash = gen.GenerateHash(filePath);

                        dataAccess.UpdateFileHash(filePath, hash, fileInfo.LastWriteTime, fileInfo.CreationTime,
                                                  fileInfo.Length);

                        Console.Write(".");
                    }
                    else
                    {
                        Console.Write("^");
                    }
                }

                catch (Exception e)
                {
                    Console.Write("!");
                    dataAccess.AddFailure(filePath, e.ToString(), e.StackTrace);
                }
            }
            Console.WriteLine();
            Console.WriteLine("Hit a key to close.");
            Console.ReadKey();
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            Config config = new Config();
            IFileMonitorDataAccess dataAccess = new SimulatedDatabase(config);

            List <HashedFile> theHashedFiles = dataAccess.GetAllHashedFileInstances().ToList();

            Dictionary <string, List <HashedFile> > hashDictionary = new Dictionary <string, List <HashedFile> >();
            List <string> duplicateHashes = new List <string>();

            foreach (HashedFile thf in theHashedFiles)
            {
                if (hashDictionary.ContainsKey(thf.Hash))
                {
                    hashDictionary[thf.Hash].Add(thf);
                    if (!duplicateHashes.Contains(thf.Hash))
                    {
                        duplicateHashes.Add(thf.Hash);
                    }
                }


                else
                {
                    hashDictionary.Add(thf.Hash, new List <HashedFile>()
                    {
                        thf
                    });
                }
            }

            foreach (string dupHash in duplicateHashes)
            {
                foreach (HashedFile xyz in hashDictionary[dupHash])
                {
                    //todo: confirm that it is still on the filesystem.   if not. delete it from filesystem, list, and database.
                }
            }

            if (duplicateHashes.Count > 0)
            {
                Console.WriteLine("Duplicates Found: " + duplicateHashes.LongCount());
                //foreach (string dh in duplicateHashes)
                //{
                //    Console.WriteLine(dh);
                //}
            }

            Console.ReadKey();
        }