【问题标题】:Proper functioning of 'Save file' in Notepad program in C#C# 记事本程序中“保存文件”的正常运行
【发布时间】:2013-07-15 19:02:28
【问题描述】:
public partial class Form1 : Form
{
    SaveFileDialog sfd = new SaveFileDialog();
    OpenFileDialog ofd = new OpenFileDialog();
    public string contents = string.Empty;
    public Form1()
    {
        InitializeComponent();
        this.Text = "Untitled";
    }

    private void newToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (richTextBox1.Text != contents)
        {
            DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel);
            if (dr == DialogResult.Yes)
            {
                sfd.Title = "Save";
                if (SaveFile() == 0)
                    return;
                else
                {
                    richTextBox1.Text = "";
                    this.Text = "Untitled";
                }
                contents = "";
            }
            else if (dr == DialogResult.No)
            {
                richTextBox1.Text = "";
                this.Text = "Untitled";
                contents = "";
            }
            else
            {
                richTextBox1.Focus();
            }
        }
        else
        {
            this.Text = "Untitled";
            richTextBox1.Text = "";
            contents = "";
        }

    }
    private int SaveFile()
    {
        sfd.Filter = "Text Documents|*.txt";
        sfd.DefaultExt = "txt";
        if (sfd.ShowDialog() == DialogResult.Cancel)
        {
            richTextBox1.Focus();
            return 0;
        }
        else
        {
            contents = richTextBox1.Text;
            if (this.Text == "Untitled")
                richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText);
            else
            {
                sfd.FileName = this.Text;
                richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText);
            }
            this.Text = sfd.FileName;
            return 1;
        }


    }
    private void OpenFile()
    {
        ofd.Filter = "Text Documents|*.txt";
        if (ofd.ShowDialog() == DialogResult.Cancel)
            richTextBox1.Focus();
        else
        {
            richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.PlainText);
            this.Text = ofd.FileName;
            contents = richTextBox1.Text;
        }
    }

    private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (richTextBox1.Text != contents)
        {
            DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel);
            if (dr == DialogResult.Yes)
            {
                SaveFile();
                OpenFile();
            }
            else if (dr == DialogResult.No)
            {
                OpenFile();
            }
            else
            {
                richTextBox1.Focus();
            }
        }
        else
            OpenFile();
    }

    private void saveToolStripMenuItem_Click(object sender, EventArgs e)
    {
        SaveFile();
    }

    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        sfd.Filter = "Text Documents|*.txt";
        sfd.DefaultExt = "txt";
        if (sfd.ShowDialog() == DialogResult.Cancel)
        {
            richTextBox1.Focus();
        }
        else
        {
            contents = richTextBox1.Text;
            richTextBox1.SaveFile(sfd.FileName, RichTextBoxStreamType.PlainText);

            this.Text = sfd.FileName;
        }            
    }

当我们打开 Windows 记事本应用程序然后打开一个文件、更改它的内容并保存它时,它只是被保存而无需打开“保存文件”对话框。但是在我在上面创建的记事本程序中,在更改保存文件的内容后单击“保存”会打开“保存文件”对话框。虽然相同的文件名出现在保存文件对话框中,但在单击“保存”时会显示一条消息“相同的文件名已存在。您要替换它吗?”。这就是我要删除的内容,并将更改的内容直接保存到打开的文件中,而无需打开保存文件对话框。

【问题讨论】:

    标签: c# file save notepad


    【解决方案1】:

    在构造之后和 ShowDialog 之前的任何时间设置 sfd.OverwritePrompt = false 以抑制覆盖警告。

    【讨论】:

      【解决方案2】:

      您希望有两个选择来保存:“另存为..”按钮和“保存”按钮。您可以创建一个string 来保存打开文件的路径。如果用户在保存文件时指定了新位置,则该位置也可能会更改。如果用户没有打开文件,“另存为...”按钮将打开常规的保存文件对话框。一旦用户指定了他们文档的位置,您就可以将文件路径保存到该字符串,并使用 `StreamWriter' 在没有对话框的情况下保存它:

      ...
      using System.IO;
      ...
      
      public partial class Form1 : Form
      {
          SaveFileDialog sfd = new SaveFileDialog();
          OpenFileDialog ofd = new OpenFileDialog();
          public string contents = string.Empty;
      
          //string to hold file location
          string currentFileLoc;
      
      
          public Form1()
          {
              InitializeComponent();
              this.Text = "Untitled";
          }
      
          private void newToolStripMenuItem_Click(object sender, EventArgs e)
          {
              if (richTextBox1.Text != contents)
              {
                  DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel);
                  if (dr == DialogResult.Yes)
                  {
                      sfd.Title = "Save";
                      if (SaveFile() == 0)
                          return;
                      else
                      {
                          richTextBox1.Text = "";
                          this.Text = "Untitled";
                      }
                      contents = "";
                  }
                  else if (dr == DialogResult.No)
                  {
                      richTextBox1.Text = "";
                      this.Text = "Untitled";
                      contents = "";
                  }
                  else
                  {
                      richTextBox1.Focus();
                  }
              }
              else
              {
                  this.Text = "Untitled";
                  richTextBox1.Text = "";
                  contents = "";
              }
      
          }
          private int SaveFile()
          {
              sfd.Filter = "Text Documents|*.txt";
              sfd.DefaultExt = "txt";
              if (sfd.ShowDialog() == DialogResult.Cancel)
              {
                  richTextBox1.Focus();
                  return 0;
              }
              else
              {
                  contents = richTextBox1.Text;
                  if (this.Text == "Untitled")
                      richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText);
                  else
                  {
                      sfd.FileName = this.Text;
                      richTextBox1.SaveFile(sfd.FileName,RichTextBoxStreamType.PlainText);
                  }
                  this.Text = sfd.FileName;
                  //
                  currentFileLoc = sfd.FileName;
                  return 1;
              }
      
      
          }
          private void OpenFile()
          {
              ofd.Filter = "Text Documents|*.txt";
              if (ofd.ShowDialog() == DialogResult.Cancel)
                  richTextBox1.Focus();
              else
              {
                  richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.PlainText);
                  this.Text = ofd.FileName;
                  contents = richTextBox1.Text;
              }
      
              currentFileLoc = ofd.FileName;
              this.Text = currentFileLoc;
          }
      
          private void openToolStripMenuItem_Click(object sender, EventArgs e)
          {
              if (richTextBox1.Text != contents)
              {
                  DialogResult dr = MessageBox.Show("Do You want to save the changes made to " + this.Text, "Save", MessageBoxButtons.YesNoCancel);
                  if (dr == DialogResult.Yes)
                  {
                      SaveFile();
                      OpenFile();
                  }
                  else if (dr == DialogResult.No)
                  {
                      OpenFile();
                  }
                  else
                  {
                      richTextBox1.Focus();
                  }
              }
              else
                  OpenFile();
          }
      
          private void saveToolStripMenuItem_Click(object sender, EventArgs e)
          {
              Save();
          }
      
          private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
          {
              SaveFile();            
          }
      
          //new method
          private void Save()
          {
              if (currentFileLoc != null)
              {
                  using (StreamWriter writer = new StreamWriter(currentFileLoc))
                  {
                      writer.WriteLine(richTextBox1.Text);
                  }
              }
      
              else
                saveFile();
           }
       }
      

      我建议您也将using(...){ } 块包含在try/catch 语句中并处理任何异常。

      【讨论】:

      • 对不起,但它没有解决我的问题.. 我想要的是在已经打开的文件中更改的内容被保存到文件中,而无需在单击“保存”按钮时打开“保存文件对话框” ..
      • 但是感谢 streamwriter 的想法。我明白了这一点并使工作正确..
      【解决方案3】:

      您需要做的是保存输入的文件名,然后,当按下保存选项时,检查之前输入的文件名。如果有,请跳过显示对话框并执行保存代码。

      【讨论】:

        猜你喜欢
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 2013-02-08
        • 2011-06-20
        • 2021-03-14
        相关资源
        最近更新 更多