如何使用C#添加保存文件对话框

5

我需要实现类似于 Notepads 的保存选项。假设我在一个 RichTextBox 旁边放置了一个按钮,当点击此按钮时,将会弹出一个对话框,该对话框看起来类似于单击 另存为 时出现的对话框。我希望能够以文本格式保存 RichTextBox 的内容,并在 保存对话框 中输入文件名。


你怎么知道要使用 [savefiledialog] 标签的?是假问题吗? - Hans Passant
1
@Hans:我正在打“savefile”,然后我被建议使用这个标签。在看到以下回答之前,我认为这个标签字面意思是“对话框保存文件”。也就是说,我不知道它是一个控件的名称。 - Shamim Hafiz - MSFT
1
好的,感谢 Stack Overflow 在您发帖之前就为您提供答案。 - Hans Passant
6个回答

10
private void Save_As_Click(object sender, EventArgs e)
{
  SaveFileDialog _SD = new SaveFileDialog(); 
  _SD.Filter = "Text File (*.txt)|*.txt|Show All Files (*.*)|*.*";
  _SD.FileName = "Untitled"; 
  _SD.Title = "Save As";
  if (__SD.ShowDialog() == DialogResult.OK)
  {
   RTBox1.SaveFile(__SD.FileName, RichTextBoxStreamType.UnicodePlainText);
  }
}

感谢您详细的帖子,更加明确了文件类型和标题。那么添加默认文件名怎么做呢? - Shamim Hafiz - MSFT
1
只需在if块上方添加此代码_SD.FileName = "Untitled"; - Overlock

7

对于WPF,您应该使用这个SaveFileDialog来保存文件。

var dialog = new Microsoft.Win32.SaveFileDialog();
dialog.Filter = "Rich Text File (*.rtf)|*.rtf|All Files (*.*)|*.*";
dialog.FileName = "Filename.rtf"; //set initial filename
if (dialog.ShowDialog() == true)
{
    using (var stream = dialog.OpenFile())
    {
       var range = new TextRange(myRichTextBox.Document.ContentStart,
                                 myRichTextBox.Document.ContentEnd);
       range.Save(stream, DataFormats.Rtf);
    }
}

保存内容怎么办?XAML标签可能会打开一个对话框,但是内容应该如何保存? - Shamim Hafiz - MSFT
@Sam,OpenFile需要更少的权限。而且FileOutputStream不是Java吗? - Ray
我在C# 2005中使用FileOutputStream。用法如下:java.io.OutputStream ostream = new java.io.FileOutputStream(new java.io.File(FileName)); WorkBook.write(ostream); ostream.close(); - Sam Casil

2

这适用于文本文件,并在 WPF 中进行了测试。

var dialog = new Microsoft.Win32.SaveFileDialog();
dialog.Filter = "Text documents (.txt)|*.txt|All Files (*.*)|*.*"; 
dialog.FileName = "Filename.txt"; 
if (dialog.ShowDialog() == true)
{                
    File.WriteAllText(dialog.FileName, MyTextBox.Text);
}

1
SaveFileDialog sfDialog = new SaveFileDialog();
sfDialog.ShowDialog();
OutputStream ostream = new FileOutputStream(new File(sfDialog.FileName));
WorkBook.write(ostream);
ostream.close();

在.NET中是否存在FileOutputStream? - Ray

1

谢谢提供链接。那么来自RichTextBox的文件内容怎么保存到相应的文件中呢? - Shamim Hafiz - MSFT
1
在保存RTF文件方面,添加了一些更多的信息。 - Joel A. Villarreal Bertoldi
System.Windows.Forms 命名空间替换为 Microsoft.Win32.SaveFileDialog,我认为你就可以开始了。 - Joel A. Villarreal Bertoldi
在WPF中,RichTextBox没有SaveFile函数。 - Ray
1
我错过了那个。你是对的。你的答案完美地解决了OP的问题,我的错。 - Joel A. Villarreal Bertoldi

0

有一个SaveFileDialog组件可供使用,阅读此处以了解其工作原理和一个可用的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接