Example #1
0
        private void ReportMissingItem(HashedFileSystemItem hashedFileSystemItemA, string file)
        {
            string result = hashedFileSystemItemA.name + "," + hashedFileSystemItemA.type + ",MISSING_FROM," + file;

            if (WriteOutputToFile)
            {
                output.WriteLine(result);
            }
            OnProgressChanged?.Invoke(this, hashedFileSystemItemA.name + "(" + hashedFileSystemItemA.type + ")" + " missing from " + file);
        }
Example #2
0
        internal void WriteResultLine(HashedFileSystemItem hashedFileSystemItem)
        {
            string hash = hashedFileSystemItem.Hash;

            if (string.IsNullOrEmpty(hash))
            {
                hash = "null";
            }

            file.WriteLine(hashedFileSystemItem.name + "*" + hashedFileSystemItem.type + "*" + hash);
        }
Example #3
0
        private void ReportDiff(HashedFileSystemItem hashedFileSystemItemA, HashedFileSystemItem hashedFileSystemItemB)
        {
            string result = hashedFileSystemItemA.name + "," + hashedFileSystemItemA.type + ",HASH_MISMATCH," +
                            File1 + "," + hashedFileSystemItemA.Hash + "," +
                            File2 + "," + hashedFileSystemItemB.Hash;

            if (WriteOutputToFile)
            {
                output.WriteLine(result);
            }
            string message =
                "Hash check failed : " + hashedFileSystemItemA.name + "(" + hashedFileSystemItemA.type + ")" + " : " + "\n" +
                File1 + " : " + hashedFileSystemItemA.Hash + "\n" +
                File2 + " : " + hashedFileSystemItemB.Hash;

            OnProgressChanged?.Invoke(this, message);
        }
Example #4
0
        private bool RollOutLines(StreamReader stream, string file, string lastLine)
        {
            string line = lastLine;

            if (line == null)
            {
                line = stream.ReadLine();
            }
            while (line != null)
            {
                if (backgroundWorker.CancellationPending)
                {
                    return(false);
                }
                manualResetEvent.WaitOne();
                HashedFileSystemItem hashedFileSystemItem = ParseItemFromString(line);
                ReportMissingItem(hashedFileSystemItem, file);
                line = stream.ReadLine();
            }
            ;
            return(true);
        }
Example #5
0
        private bool Diff()
        {
            if (!File.Exists(File1))
            {
                errorMessage = "Error: First hash file " + File1 + " doesn't exist.";
                return(false);
            }
            if (!File.Exists(File2))
            {
                errorMessage = "Error: Second hash file " + File2 + " doesn't exist.";
                return(false);
            }
            if (WriteOutputToFile)
            {
                try
                {
                    output = File.CreateText(OutputFile);
                }
                catch (Exception ex)
                {
                    errorMessage = "Error opening output file " + OutputFile + ": " + ex.Message;
                    return(false);
                }
            }
            StreamReader A = new StreamReader(File1);
            StreamReader B = new StreamReader(File2);

            string lineA    = A.ReadLine();
            string lineB    = B.ReadLine();
            bool   finished = false;
            FileSystemItemComparer fileSystemItemComparer = new FileSystemItemComparer();

            while (!finished)
            {
                if (backgroundWorker.CancellationPending)
                {
                    break;
                }
                manualResetEvent.WaitOne();
                if (lineA == null)
                {
                    finished = RollOutLines(B, File1, lineB);
                    break;
                }
                if (lineB == null)
                {
                    finished = RollOutLines(A, File2, lineA);
                    break;
                }
                if (!finished)
                {
                    HashedFileSystemItem hashedFileSystemItemA = ParseItemFromString(lineA);
                    if (hashedFileSystemItemA == null)
                    {
                        errorMessage = "Could not parse line, aborting.";
                        OnProgressChanged?.Invoke(this, "Could not parse line: " + lineA);
                        break;
                    }
                    HashedFileSystemItem hashedFileSystemItemB = ParseItemFromString(lineB);
                    if (hashedFileSystemItemB == null)
                    {
                        errorMessage = "Could not parse line, aborting.";
                        OnProgressChanged?.Invoke(this, "Could not parse line: " + lineB);
                        break;
                    }
                    int cmpResult = fileSystemItemComparer.Compare(hashedFileSystemItemA, hashedFileSystemItemB);
                    if (cmpResult == -1)
                    {
                        ReportMissingItem(hashedFileSystemItemA, File2);
                        lineA = A.ReadLine();
                        continue;
                    }
                    if (cmpResult == 1)
                    {
                        ReportMissingItem(hashedFileSystemItemB, File1);
                        lineB = B.ReadLine();
                        continue;
                    }
                    if (hashedFileSystemItemA.Hash == hashedFileSystemItemB.Hash)
                    {
                        ReportMatch(hashedFileSystemItemA.name);
                    }
                    else
                    {
                        ReportDiff(hashedFileSystemItemA, hashedFileSystemItemB);
                    }
                    lineA = A.ReadLine();
                    lineB = B.ReadLine();
                }
            }

            A.Close();
            B.Close();
            if (WriteOutputToFile)
            {
                output.Flush();
                output.Close();
            }
            return(finished);
        }