public void CompareAllFilesFromLatestScanWithAllPreviousFileScans()
        {
            List <FileScan> allFileScans = FileScan.GetAllFileScansFromScan(this.Id);

            //Logger.Log("Changed Files\n");

            foreach (FileScan fileScan in allFileScans)
            {
                FileScan other = FileScan.GetLatestPreviousFileScan(fileScan.Time, this.HashAlgorithm);

                if (other == null)
                {
                    Logger.Log("PREVIOUSLY NOT FOUND;;" + fileScan.FilePath,
                               LogType.Warning);

                    continue;
                }

                if (fileScan.Checksum != other.Checksum)
                {
                    string log = String.Format("CHANGED FILE;{0}",
                                               fileScan.FilePath);
                    Logger.Log(log, LogType.Notification);
                }
            }
        }
        public static void ScanFile(string filePath, Scan scan)
        {
            string checksum = FileChecksumCreator.GetFileChecksum(filePath, scan.HashAlgorithm.Algorithm);
            int    fileSize = 0; //Leave open for now!

            FileScan fileScan = new FileScan
            {
                FilePath = filePath,
                Checksum = checksum,
                FileSize = fileSize,
                ScanId   = scan.Id,
                Time     = DateTime.Now
            };

            if (!fileScan.Insert())
            {
                throw new Exception("Unknown error: the file checksum could not be stored in the database!");
            }
        }
        public static void StartSingleFileScan(string filePath, AvailableHashAlgorithms hashAlgorithm)
        {
            Scan scan = new Scan
            {
                FilePath      = filePath,
                HashAlgorithm = new FIMHashAlgorithm {
                    Id = (int)hashAlgorithm
                },
                Time = DateTime.Now
            };

            try
            {
                FileScan.ScanFile(filePath, scan);
            }
            catch (Exception ex)
            {
                Logger.Log(ex.Message, LogType.Error);
            }
        }
        public static void StartScanConsole(string filePath, bool recursive, AvailableHashAlgorithms hashAlgorithm)
        {
            Scan scan = new Scan
            {
                FilePath      = filePath,
                HashAlgorithm = new FIMHashAlgorithm {
                    Id = (int)hashAlgorithm
                },
                Time = DateTime.Now
            };

            scan.Insert();

            //insert scan in database

            List <string> allFiles = DirectoryParser.GetAllFiles(filePath, recursive);

            int nFiles = allFiles.Count;
            int i      = 0;

            Console.WriteLine("Scanning ...");
            foreach (string file in allFiles)
            {
                try
                {
                    FileScan.ScanFile(file, scan);

                    Console.WriteLine(Math.Ceiling(((double)i / nFiles) * 100).ToString() + "%");
                    Console.SetCursorPosition(0, Console.CursorTop - 1);
                    System.Threading.Thread.Sleep(50);
                    i++;
                }
                catch (Exception ex)
                {
                    Logger.Log(ex.Message, LogType.Error);

                    continue;
                }
            }
        }
 public bool CompareFileChecksums(FileScan other)
 {
     return(other != null &&
            !string.IsNullOrEmpty(this.Checksum) && !string.IsNullOrEmpty(other.Checksum) &&
            this.Checksum == other.Checksum);
 }