using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.Windows.Forms; namespace ConfigEditor { public partial class MainForm: Form { private string opened_file_path = null; private string[] original_file_data = null; public MainForm() { InitializeComponent(); } private void ClearData() { opened_file_path = null; if (original_file_data != null) Array.Clear(original_file_data, 0, original_file_data.Length); richTextBox1.Clear(); ActiveForm.Text = "SaveWizard Config Editor"; } private void openToolStripMenuItem_Click(object sender, EventArgs e) { if (!IsModificationSaved()) return; ClearData(); OpenFileDialog ofd = new OpenFileDialog() { Title = "Choose configuration file", Filter = "File *.json|*.json", Multiselect = false }; if (ofd.ShowDialog() == DialogResult.OK) { opened_file_path = ofd.FileName; original_file_data = File.ReadAllLines(ofd.FileName); richTextBox1.Text = File.ReadAllText(ofd.FileName); ActiveForm.Text = $"{ofd.FileName} - SaveWizard Config Editor"; } } private void saveToolStripMenuItem_Click(object sender, EventArgs e) { if (opened_file_path == null) return; File.WriteAllText(opened_file_path, richTextBox1.Text); } private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog { Title = "Save configuration file", Filter = "File *.json|*.json" }; if (sfd.ShowDialog() == DialogResult.OK) { File.WriteAllText(sfd.FileName, richTextBox1.Text); opened_file_path = sfd.FileName; ActiveForm.Text = $"{sfd.FileName} - SaveWizard Config Editor"; } } private void generateMD5ToolStripMenuItem_Click(object sender, EventArgs e) { using (var md5 = MD5.Create()) { using (FileStream stream = File.OpenRead(opened_file_path)) md5.ComputeHash(stream); StringBuilder sb = new StringBuilder(); byte[] hash = md5.Hash; for (int i = 0; i < hash.Length; i++) sb.Append(hash[i].ToString("x2")); Clipboard.SetText(sb.ToString()); MessageBox.Show($"Hash successfully copied into your clipboard.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private bool IsModificationSaved() { if (opened_file_path == null) return true; bool isDataEquals = true; string[] rtbLines = richTextBox1.Text.Split( new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None ); for (int i = 0; i < original_file_data.Length; i++) { if (rtbLines[i] != original_file_data[i]) { isDataEquals = false; break; } } if (isDataEquals) { return true; } DialogResult result = MessageBox.Show("The document has been modified.\nDo you want to save your changes?", "Question", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (result == DialogResult.Yes) { File.WriteAllText(opened_file_path, richTextBox1.Text); MessageBox.Show("File successfully saved.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); return true; } else if (result == DialogResult.No) return true; else if (result == DialogResult.Cancel) return false; return false; } private void closeFileToolStripMenuItem_Click(object sender, EventArgs e) { if (!IsModificationSaved()) return; ClearData(); } private void closeToolStripMenuItem_Click(object sender, EventArgs e) { if (!IsModificationSaved()) return; Application.Exit(); } private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { if (!IsModificationSaved()) return; Application.Exit(); } } }