Blizzardo1 icon

Hex Compare Test

Blizzardo1 | PRO | 01/21/19 05:11:26 AM UTC | 0 ⭐ | 1118 👁️ | Never ⏰ | []
C# |

6.02 KB

|

None

|

0 👍

/

0 👎

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace HexComparer
{
    internal class HexCompare : Form {
        private long _yline, _ydiff;
        private Label _label3;
        private TextBox _textBox1, _textBox2;
        private DataGridView _dataGridView;
        private Button _btnDisplay;
 
        private Point PointTo( int x, int y ) => new Point( x, y );
        private Size SizeTo( int w, int h ) => new Size( w, h );
 
        public HexCompare( ) {
            InitializeComponent();
        }
 
        private void InitializeComponent( ) {
            SuspendLayout( );
            _label3 = new Label {
                AutoSize = true,
                Location = PointTo( 9, 12 ),
                Name = "_label3"
            };
 
            _textBox1 = new TextBox {
                Size = SizeTo( 170, 23 ),
                Location = PointTo( 9, 24 ),
                Name = "_textBox1"
            };
 
            _textBox2 = new TextBox {
                Size = SizeTo( 170, 23 ),
                Name = "_textBox2"
            };
            _textBox2.Location = PointTo( _textBox1.Location.X + _textBox2.Size.Width + 16, _textBox1.Location.Y );
 
            _dataGridView = new DataGridView {
                Size = SizeTo( 350, 200 ),
                Location = PointTo( 9, _textBox1.Location.Y + 24 ),
                Name = "_dataGridView"
            };
 
            _dataGridView.Columns.Add( "Compare", "Compare" );
 
            _btnDisplay = new Button {
                Size = SizeTo( 100, 23 ),
                Name = "_btnDisplay",
                Text = "Check Files"
            };
            _btnDisplay.Location = PointTo( _dataGridView.Width - _btnDisplay.Size.Width + 8,
                _dataGridView.Height + _btnDisplay.Size.Height + 32 );
            _btnDisplay.Click += btnDisplay_Click;
            
            Name = "HexCompare";
            Text = "Hex Comparer";
            Size = SizeTo(400, 450 );
 
            Controls.AddRange( new Control[] {_label3, _textBox1, _textBox2, _dataGridView, _btnDisplay} );
 
            ResumeLayout( );
        }
 
        private void btnDisplay_Click(object sender, EventArgs e)
        {
            if (!((_textBox1.Text == "") | (_textBox2.Text == "")))
            {
                _label3.Text = "";
                _dataGridView.Rows.Clear();
                Cursor = Cursors.WaitCursor;
                FileEquals(_textBox1.Text, _textBox2.Text);
                Cursor = Cursors.Default;
                _label3.Text = string.Concat(_ydiff, " different line(s) found");
                MessageBox.Show("Done !");
            }
            else
            {
                MessageBox.Show("Error: Select Two Files For Comparison");
            }
        }
 
 
        private bool FileEquals(string file1, string file2) {
            bool flag;
            using (var fileStream = new FileStream(file1, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                using (var fileStream1 = new FileStream(file2, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    using (var binaryReader = new BinaryReader(fileStream))
                    {
                        using (var binaryReader1 = new BinaryReader(fileStream1))
                        {
                            _yline = 0;
                            _ydiff = 0;
                            while (true)
                            {
                                _yline++;
                                byte[] numArray = binaryReader.ReadBytes(16);
                                byte[] numArray1 = binaryReader1.ReadBytes(16);
                                const int num = 16;
                                string str = numArray.Select(( c, i ) => new { Char = c, Chunk = i / num }).GroupBy((c) => c.Chunk).Select((g) => (
                                    from c in g
                                    select $"{c.Char:X2} " ).Aggregate(string.Concat)).Select(( s, i ) =>
                                    $"{_yline * num:d6}: {s}" ).Aggregate("", ( s, i ) => string.Concat(s, i, Environment.NewLine));
                                string str1 = numArray1.Select(( c, i ) => new { Char = c, Chunk = i / num }).GroupBy((c) => c.Chunk).Select((g) => (
                                    from c in g
                                    select $"{c.Char:X2} " ).Aggregate(string.Concat)).Select(( s, i ) =>
                                    $"{_yline * num:d6}: {s}" ).Aggregate("", ( s, i ) => string.Concat(s, i, Environment.NewLine));
                                if (numArray.Length != numArray1.Length)
                                {
                                    _dataGridView.Rows.Add( _yline, str, str1, "", "" );
                                    _ydiff++;
                                }
                                if (numArray.Length == 0)
                                {
                                    break;
                                }
 
                                if ( numArray.SequenceEqual( numArray1 ) ) continue;
 
                                _dataGridView.Rows.Add( _yline, str, str1, "", "" );
                                _ydiff++;
                            }
                            flag = true;
                        }
                    }
                }
            }
            return flag;
        }
 
        private string Offset(byte[] ba)
        {
            var stringBuilder = new StringBuilder(ba.Length * 2);
            byte[] numArray = ba;
            foreach ( byte t in numArray ) {
                stringBuilder.Append($"{t:x2}");
            }
            return stringBuilder.ToString();
        }
 
        private string YtoString(byte[] b) => b.Aggregate( "", ( current, t ) => string.Concat( current, " ", t.ToString( ) ) );
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎