'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 |
|---|
