'Save and Save as Click-event for Richtextbox (C#, WPF)

I am working on Text Editor and have the below Click event for saving Files.

private void SaveFile_Click(object sender, RoutedEventArgs e)
       {
            SaveFileDialog saveFile = new SaveFileDialog();
            saveFile.FileName = "Untitled";
            saveFile.Title = "Save";
            saveFile.Filter = "Plain Text File (*.txt)|*.txt|Rich Text File (*.rtf)|*.rtf|All files (*.*)|*.*";
            if (saveFile.ShowDialog() == true)
            {
                FileStream fileStream = new FileStream(saveFile.FileName, FileMode.CreateNew);
                TextRange range = new TextRange(richtxtbox.Document.ContentStart, richtxtbox.Document.ContentEnd);
                range.Save(fileStream, DataFormats.Text);
            }
      }

Then I wanted to save the changes without the open file dialog box appearing again, so I changed code like this:

int Counter = 0;
SaveFileDialog saveFile = new SaveFileDialog();

private void SaveFile_Click(object sender, RoutedEventArgs e)
        {
            TextRange range = new TextRange(richtxtbox.Document.ContentStart, richtxtbox.Document.ContentEnd);
            if (Counter == 0)
            {
                saveFile.FileName = "Untitled";
                saveFile.Title = "Save";
                saveFile.Filter = "Plain Text File (*.txt)|*.txt|Rich Text File (*.rtf)|*.rtf|All files (*.*)|*.*";

                if (saveFile.ShowDialog() == true)
                {
                    FileStream fileStream = new FileStream(saveFile.FileName, FileMode.Create);

                    if (saveFile.FileName.EndsWith("txt"))
                    {
                        range.Save(fileStream, DataFormats.Text);
                        Counter++;
                    }
                    else if (saveFile.FileName.EndsWith("rtf"))
                    {
                        range.Save(fileStream, DataFormats.Rtf);
                        Counter++;
                    }
                }
            }
            else
            {
                FileStream fileStreamAfterChange = new FileStream(saveFile.FileName, FileMode.Create);
                if (saveFile.FileName.EndsWith("txt"))
                {
                    range.Save(fileStreamAfterChange, DataFormats.Text);
                }
                else if (saveFile.FileName.EndsWith("rtf"))
                {
                    range.Save(fileStreamAfterChange, DataFormats.Text);
                }
            }

        }

so far this works fine for first-time saves and for changes without a dialog box. then I wanted an extra click event for save as. and that is the same as save.

private void saveAs_Click(object sender, RoutedEventArgs e)
        {
            SaveFileDialog saveFileAs = new SaveFileDialog();
            saveFileAs.FileName = "Untitled";
            saveFileAs.Title = "Save as";
            saveFileAs.Filter = "Plain Text File (*.txt)|*.txt|Rich Text File (*.rtf)|*.rtf|All files (*.*)|*.*";
            saveFileAs.DefaultExt = "*.txt";
            if (saveFileAs.ShowDialog() == true)
            {
                FileStream fileStream = new FileStream(saveFileAs.FileName, FileMode.CreateNew);
                TextRange range = new TextRange(richtxtbox.Document.ContentStart, richtxtbox.Document.ContentEnd);
                range.Save(fileStream, DataFormats.Text);
            }
        }

The problem is when I save a file, for example, A.txt, and then save it with save as as B.txt, it works, but when I make changes in B.txt, they are saved in A.txt. Problem is that filestream takes the filename for savefile, it should be for saveFileAs.

How can I solve this? And Is there a better way to save changes without a counter variable?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source