Fixed resource leak when opening files within the same file.

This commit is contained in:
Lukasz Baldyga committed 2020-10-23 11:42:46 +01:00
1 parent b888088f0b
commit d081500dcb
2 files changed
+33 -25

No files matched your search

@@ -187,6 +187,7 @@ namespace Advanced_Software_Engineering
// timer1 // timer1
// //
this.timer1.Interval = 1000; this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
// //
// Text_Editor // Text_Editor
// //
@@ -39,6 +39,7 @@ namespace Advanced_Software_Engineering {
newWindow = false; newWindow = false;
okToOverwrite = true; okToOverwrite = true;
UpdateTitle(openFile.FileName); UpdateTitle(openFile.FileName);
fileStream.Close();
} }
void UpdateTitle(string fileName) { void UpdateTitle(string fileName) {
@@ -55,14 +56,15 @@ namespace Advanced_Software_Engineering {
private void saveFile() { private void saveFile() {
if (!okToOverwrite) saveFileAs(); if (!okToOverwrite) saveFileAs();
else { else {
StreamWriter fileStream = new StreamWriter(fileName);
try { try {
StreamWriter fileStream = new StreamWriter(fileName);
fileStream.Write(textBox1.Text); fileStream.Write(textBox1.Text);
unsavedChanges = false; unsavedChanges = false;
showSavedMessage();
fileStream.Close();
} catch (Exception e) { } catch (Exception e) {
new ErrorWindow("Write Failed!", "The program failed to write the file.", e.Message + "\n" + e.StackTrace, ErrorWindow.ERROR_MESSAGE).Show(); new ErrorWindow("Write Failed!", "The program failed to write the file.", e.Message + "\n" + e.StackTrace, ErrorWindow.ERROR_MESSAGE).Show();
} finally { } finally {
fileStream.Close();
UpdateTitle(); UpdateTitle();
} }
} }
@@ -83,6 +85,7 @@ namespace Advanced_Software_Engineering {
unsavedChanges = false; unsavedChanges = false;
okToOverwrite = true; okToOverwrite = true;
fileName = saveFileDialog.FileName; fileName = saveFileDialog.FileName;
showSavedMessage();
} catch (Exception e) { } catch (Exception e) {
new ErrorWindow("Write Failed!", "The program failed to write the file.", e.Message + "\n" + e.StackTrace, ErrorWindow.ERROR_MESSAGE).Show(); new ErrorWindow("Write Failed!", "The program failed to write the file.", e.Message + "\n" + e.StackTrace, ErrorWindow.ERROR_MESSAGE).Show();
} finally { } finally {
@@ -92,6 +95,11 @@ namespace Advanced_Software_Engineering {
} }
} }
private void showSavedMessage() {
label1.Text = "File saved";
timer1.Start();
}
private void updateRowCol() { private void updateRowCol() {
int line = textBox1.GetLineFromCharIndex(textBox1.SelectionStart); int line = textBox1.GetLineFromCharIndex(textBox1.SelectionStart);
int column = textBox1.SelectionStart - textBox1.GetFirstCharIndexFromLine(line); int column = textBox1.SelectionStart - textBox1.GetFirstCharIndexFromLine(line);
@@ -112,26 +120,22 @@ namespace Advanced_Software_Engineering {
} }
private void openFile() { private void openFile() {
DialogResult result = DialogResult.Yes;
if (unsavedChanges) { OpenFileDialog openFileDialog = new OpenFileDialog();
result = MessageBox.Show("You have unsaved work. Would you like to discard your work and open a new file?", "Unsaved work!", MessageBoxButtons.YesNo, MessageBoxIcon.None);
if (openFileDialog.ShowDialog() == DialogResult.OK) {
if (newWindow) {
StreamReader fileStream = new StreamReader(openFileDialog.OpenFile());
textBox1.Text = fileStream.ReadToEnd();
unsavedChanges = false;
okToOverwrite = true;
newWindow = false;
UpdateTitle(openFileDialog.FileName);
fileStream.Close();
} else new Text_Editor(openFileDialog).Show();
} }
if (result == DialogResult.Yes) {
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK) {
if (newWindow) {
StreamReader fileStream = new StreamReader(openFileDialog.OpenFile());
textBox1.Text = fileStream.ReadToEnd();
unsavedChanges = false;
newWindow = false;
UpdateTitle(openFileDialog.FileName);
} else new Text_Editor(openFileDialog).Show();
}
}
} }
private void RunCode() { private void RunCode() {
@@ -184,7 +188,7 @@ namespace Advanced_Software_Engineering {
} }
private void runToolStripMenuItem_Click(object sender, EventArgs e) => RunCode(); private void runToolStripMenuItem_Click(object sender, EventArgs e) => RunCode();
private void createNewInstance() => new Text_Editor().Show(); private void createNewInstance() => new Text_Editor().Show();
@@ -205,7 +209,7 @@ namespace Advanced_Software_Engineering {
private void Text_Editor_PreviewKeyDown(object sender, KeyEventArgs e) { private void Text_Editor_PreviewKeyDown(object sender, KeyEventArgs e) {
//New window //New window
if(e.Control && e.KeyCode == Keys.N) { if (e.Control && e.KeyCode == Keys.N) {
createNewInstance(); createNewInstance();
e.Handled = true; e.Handled = true;
} else if (e.Control && e.KeyCode == Keys.S) { } else if (e.Control && e.KeyCode == Keys.S) {
@@ -217,13 +221,13 @@ namespace Advanced_Software_Engineering {
} else if (e.Control && e.KeyCode == Keys.O) { } else if (e.Control && e.KeyCode == Keys.O) {
openFile(); openFile();
e.Handled = true; e.Handled = true;
} else if(e.KeyCode == Keys.F5) { } else if (e.KeyCode == Keys.F5) {
RunCode(); RunCode();
e.Handled = true; e.Handled = true;
} else if(e.KeyCode == Keys.F5 && e.Shift) { } else if (e.KeyCode == Keys.F5 && e.Shift) {
CheckCode(); CheckCode();
e.Handled = true; e.Handled = true;
} else if(e.KeyCode == Keys.F1 && e.Shift) { } else if (e.KeyCode == Keys.F1 && e.Shift) {
DescribeCode(); DescribeCode();
e.Handled = true; e.Handled = true;
} }
@@ -233,6 +237,9 @@ namespace Advanced_Software_Engineering {
private void describeToolStripMenuItem_Click(object sender, EventArgs e) => DescribeCode(); private void describeToolStripMenuItem_Click(object sender, EventArgs e) => DescribeCode();
private void timer1_Tick(object sender, EventArgs e) {
updateRowCol();
timer1.Stop();
}
} }
} }