using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Text.RegularExpressions; namespace FindDifferences { public partial class frmFindDifferences : Form { public frmFindDifferences() { InitializeComponent(); } private void frmFindDifferences_Load(object sender, EventArgs e) { LoadSettings(); SetupComboBoxes(); } private void LoadSettings() { Size = Properties.Settings.Default.Size; Resize += new EventHandler(frmFindDifferences_Resize); Location = Properties.Settings.Default.Location; Move += new EventHandler(frmFindDifferences_Move); tbCompare.Text = Properties.Settings.Default.CompareFolder; tbCompare.TextChanged += new EventHandler(tbCompare_TextChanged); tbPdf.Text = Properties.Settings.Default.PdfFolder; tbPdf.TextChanged += new EventHandler(tbPdf_TextChanged); splitContainer1.SplitterDistance = Properties.Settings.Default.SplitterDistance; splitContainer1.SplitterMoved +=new SplitterEventHandler(splitContainer1_SplitterMoved); WindowState = Properties.Settings.Default.WindowState; cbShowFirst.Checked = Properties.Settings.Default.ShowFirst; cbShowFirst.CheckedChanged += new EventHandler(cbShowFirst_CheckedChanged); } void cbShowFirst_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.ShowFirst = cbShowFirst.Checked; SetupDifferences(); } void tbPdf_TextChanged(object sender, EventArgs e) { Properties.Settings.Default.PdfFolder = tbPdf.Text; } void tbCompare_TextChanged(object sender, EventArgs e) { Properties.Settings.Default.CompareFolder = tbCompare.Text; SetupComboBoxes(); } void frmFindDifferences_Move(object sender, EventArgs e) { Properties.Settings.Default.WindowState = WindowState; if (WindowState == FormWindowState.Normal) Properties.Settings.Default.Location = Location; } void frmFindDifferences_Resize(object sender, EventArgs e) { Properties.Settings.Default.WindowState = WindowState; if (WindowState == FormWindowState.Normal) Properties.Settings.Default.Size = Size; } private void SetupComboBoxes() { if (tbCompare.Text != string.Empty) LoadComboBoxes(); else DisableComboBoxes(); } private void LoadComboBoxes() { DirectoryInfo di = new DirectoryInfo(tbCompare.Text); if (di.Exists) { List myFiles1 = new List(); List myFiles2 = new List(); foreach (FileInfo myFile in di.GetFiles("*.txt")) { myFiles1.Add(myFile.Name); myFiles2.Add(myFile.Name); } cmbCompare.SelectedIndexChanged -= new EventHandler(cmbCompare_SelectedIndexChanged); cmbWith.SelectedIndexChanged -= new EventHandler(cmbCompare_SelectedIndexChanged); cmbCompare.DataSource = myFiles1; cmbWith.DataSource = myFiles2; cmbCompare.Enabled = true; cmbWith.Enabled = true; cmbCompare.SelectedIndex = -1; cmbWith.SelectedIndex = -1; cmbCompare.SelectedIndexChanged += new EventHandler(cmbCompare_SelectedIndexChanged); cmbWith.SelectedIndexChanged += new EventHandler(cmbCompare_SelectedIndexChanged); } else DisableComboBoxes(); } void cmbCompare_SelectedIndexChanged(object sender, EventArgs e) { SetupDifferences(); } private void DisableComboBoxes() { lbDifferences.Enabled = false; cmbCompare.Enabled = false; cmbWith.Enabled = false; } private void SetupDifferences() { if (cmbCompare.Text != string.Empty && cmbWith.Text != string.Empty) { List compareList = BuildList(cmbCompare.Text); List withList = BuildList(cmbWith.Text); RemoveMatches(withList, compareList); if (cbShowFirst.Checked) RemoveMultiples(withList); lbDifferences.Click -= new EventHandler(lbDifferences_Click); //lbDifferences.SelectedIndexChanged -= new EventHandler(lbDifferences_SelectedIndexChanged); lblDifferences.Text = withList.Count.ToString() + " Differences"; lbDifferences.DataSource = withList; lbDifferences.Enabled = true; //lbDifferences.SelectedIndexChanged += new EventHandler(lbDifferences_SelectedIndexChanged); lbDifferences.Click += new EventHandler(lbDifferences_Click); } else { lbDifferences.DataSource = null; lbDifferences.Enabled = false; } } void lbDifferences_Click(object sender, EventArgs e) { wb.Navigate("about:blank"); Clipboard.Clear(); if (lbDifferences.SelectedValue != null) { Clipboard.SetText(lbDifferences.SelectedValue.ToString()); tmr.Enabled = true; } } Regex myRegExpMult = new Regex("'([^']*?)','([^']*)?',([0-9]*,'[^']*?)'"); private void RemoveMultiples(List withList) { List multList = new List(); string last = string.Empty; foreach (string str in withList) { string found = myRegExpMult.Replace(str, "$1.$2"); if (found == last) multList.Add(str); last = found; } foreach (string str in multList) withList.Remove(str); } void lbDifferences_SelectedIndexChanged(object sender, EventArgs e) { wb.Navigate("about:blank"); Clipboard.Clear(); if (lbDifferences.SelectedValue != null) { Clipboard.SetText(lbDifferences.SelectedValue.ToString()); tmr.Enabled = true; } } private void RemoveMatches(List withList, List compareList) { foreach (string str in compareList) if (withList.Contains(str)) withList.Remove(str); } private List BuildList(string fileName) { List myList = new List(); FileInfo myFile = new FileInfo(tbCompare.Text + "\\" + fileName); using (StreamReader sr = myFile.OpenText()) { while (!sr.EndOfStream) { string str = sr.ReadLine(); if(str != string.Empty) myList.Add(str); } sr.Close(); } return myList; } private string CompareFolder { get { if (tbCompare.Text == string.Empty) return Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); return tbCompare.Text; } } private string PdfFolder { get { if (tbPdf.Text == string.Empty) return Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); return tbPdf.Text; } } private void btnCompare_Click(object sender, EventArgs e) { fbd.SelectedPath = CompareFolder; if (fbd.ShowDialog() == DialogResult.OK) tbCompare.Text = fbd.SelectedPath; } private void btnPdf_Click(object sender, EventArgs e) { fbd.SelectedPath = PdfFolder; if (fbd.ShowDialog() == DialogResult.OK) tbPdf.Text = fbd.SelectedPath; } private void frmFindDifferences_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.Save(); } Regex myRegExp = new Regex("'([^']*?)','[^']*?',([0-9]*,'[^']*?)'"); private void tmr_Tick(object sender, EventArgs e) { tmr.Enabled = false; string url = myRegExp.Replace(lbDifferences.SelectedValue.ToString(), tbPdf.Text + @"\$1.pdf#search=""$2"""); wb.Navigate(url); } private void btnClosePdf_Click(object sender, EventArgs e) { wb.Navigate("about:blank"); } private void btnRefresh_Click(object sender, EventArgs e) { int indCompare = cmbCompare.SelectedIndex; int indWith = cmbWith.SelectedIndex; LoadComboBoxes(); cmbCompare.SelectedIndex = indCompare; cmbWith.SelectedIndex = indWith; } private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e) { Properties.Settings.Default.SplitterDistance = splitContainer1.SplitterDistance; } private void btnCopy_Click(object sender, EventArgs e) { Clipboard.Clear(); StringBuilder sb = new StringBuilder(); foreach(string str in lbDifferences.DataSource as List) { sb.Append(str + "\r\n"); } Clipboard.SetText(sb.ToString()); } } }