从RichTextBox覆盖文本文件

时间:2017-06-15 11:40:07

标签: c# winforms richtextbox

现在,如果您撰写文字并点击保存button,则会显示OpenFileDialog。如果您在同一文档中完成某些操作并再次单击save button,则需要再次选择保存位置。如何保存同一个文件,每次都不需要创建一个新文件,只是覆盖当前文件?抱歉我的英文。

private void buttonSave_Click(object sender, EventArgs e)
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "Rich Text File | *.rtf";

    if (sfd.ShowDialog() == DialogResult.OK)
    {
        richTextBox1.SaveFile(sfd.FileName);
    }
    else
    {

    }
}

3 个答案:

答案 0 :(得分:0)

可以肯定的是,您只需要记住您保存的最后一个文件路径,并且下次不再显示该对话框;这样的事情应该有所帮助:

void Main()
{
    Save();
}

private string _filePath = "";
void Save()
{
    var overwrite = false;

    if (!string.IsNullOrEmpty(_filePath))
    {
        var res =
        MessageBox.Show("Would you like to overwrite your last saved file?", "Overwrite?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1,
        MessageBoxOptions.DefaultDesktopOnly, false);

        if (res == DialogResult.Cancel) return;
        if (res == DialogResult.No) overwrite = false;
        if (res == DialogResult.Yes) overwrite = true;
    }

    if (!overwrite)
    {
        var sfd = new SaveFileDialog();
        sfd.Filter = "Rich Text File|*.rtf";
        var res = sfd.ShowDialog();
        if (res != DialogResult.OK) return;
        _filePath = sfd.FileName;
    }

    // do the richTextBox.SaveFile(_filePath) here.

}

在这个例子中:

CHECK IF FILE PATH ALREADY SET
IF NOT THEN
  ASK USER IF THEY WANT TO OVERWRITE THE LAST FILE
  IF CANCEL THEN DON'T SAVE
  IF YES THEN SET OVERWRITE TO TRUE
  IF NO THEN SET OVERWRITE TO FALSE
END IF
CHECK IF OVERWRITING
IF OVERWRITING THEN
  SHOW SAVE FILE DIALOG
  IF USER DIDN'T CLICK OK THEN DON'T SAVE
  IF USER CLICKED OK, SET THE NEW FILE PATH TO USE
END IF
SAVE THE FILE USING THE NOW-REMEMBERED FILE PATH

答案 1 :(得分:0)

也许:

private void SaveButton_Click(object sender, EventArgs e) 
{ 

SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = @"C:\"; 
saveFileDialog1.Title = "Save text Files"; 
saveFileDialog1.CheckFileExists = true; 
saveFileDialog1.CheckPathExists = true; 
saveFileDialog1.DefaultExt = "txt"; 
saveFileDialog1.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"; 
saveFileDialog1.FilterIndex = 2; 
saveFileDialog1.RestoreDirectory = true;       

if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
   textBox1.Text = saveFileDialog1.FileName;             
} 
} 

示例来自:http://www.c-sharpcorner.com/uploadfile/mahesh/savefiledialog-in-C-Sharp/

可以帮一些吗?

答案 2 :(得分:0)

 private string filePath = string.Empty;
    private void SaveButton_Click(object sender, EventArgs e) 
    {
        if (File.Exists(filePath))
        {
            byte[] buffer = Encoding.ASCII.GetBytes(richTextBox1.Text);
            MemoryStream ms = new MemoryStream(buffer);
            //write to file
            FileStream file = new FileStream(filePath, FileMode.Create, FileAccess.Write);
            ms.WriteTo(file);
            file.Close();
            ms.Close();
        }
        else
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Rich Text File | *.rtf";
            sfd.OverwritePrompt = false;
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                richTextBox1.SaveFile(sfd.FileName);
                filePath = sfd.FileName;

            }
        }
    }

你可以使用sfd.OverwritePrompt = false;如果文件已存在则避免提示消息框的属性,这是您要查找的内容吗?