打开(静默)保存的文件时出错c#

时间:2017-01-24 16:42:38

标签: c# richtextbox streamwriter

我一直在用c#编写文本编辑器,最近添加了静默保存文件的功能(没有SaveFileDialog)。该文件似乎正确保存,但是,在尝试打开文件时,我收到错误System.ArgumentException - File format is not valid。如果文件没有以静默方式保存,它会打开。

代码:

保存方法:

    public void save(RichTextBoxPrintCtrl.RichTextBoxPrintCtrl rtbIn, string fileNameIn)
    {
        string fileName = "";
        if (getFileFromMap(fileNameIn) != "")
        {
            // The file already exists in the Map so save it
            fileName = getFileFromMap(fileNameIn);
            StreamWriter writer = new StreamWriter(fileName);
            writer.Write(rtbIn.Text);
            writer.Close();
        }
        else
        {
            // The file does not exist in the Map so
            // Send it to SaveAs with the rtb and the initial fileName passed in
            saveAs(rtbIn, fileNameIn);
        }

    }

另存为:

    public string saveAs(RichTextBoxPrintCtrl.RichTextBoxPrintCtrl rtbIn, string fileName)
    {
        saveDialog.FileName = fileName;
        saveDialog.Title = "Save As";

        if (saveDialog.ShowDialog() == DialogResult.OK)
        {
            if (saveDialog.FileName.Length > 0)
            {
                if (saveDialog.FileName.EndsWith(".rtf"))
                {
                    rtbIn.SaveFile(saveDialog.FileName, RichTextBoxStreamType.RichText);
                }
                else
                {
                    rtbIn.SaveFile(saveDialog.FileName, RichTextBoxStreamType.PlainText);
                }
                addFileToMap(fileName, saveDialog.FileName);
                return Path.GetFileName(saveDialog.FileName);
            }
            else { return ""; }
        }
        else { return ""; }
    }

并打开:

    public string open(RichTextBoxPrintCtrl.RichTextBoxPrintCtrl rtbIn)
    {
        if (openDialog.ShowDialog() == DialogResult.OK)
        {
            if (openDialog.FileName.Length > 0)
            {
                string fileName = Path.GetFileName(openDialog.FileName);

                if (fileName.EndsWith(".rtf"))
                {
                    rtbIn.LoadFile(openDialog.FileName, RichTextBoxStreamType.RichText);
                }
                else
                {
                    rtbIn.LoadFile(openDialog.FileName, RichTextBoxStreamType.PlainText);
                }
                addFileToMap(openDialog.FileName, openDialog.FileName);
                return fileName;
            }
            else { return ""; }
        }
        else { return ""; }
    }

其他信息:

  • 文件名存储在字典中,因为编辑器有标签。
  • RichTextBoxPrintCtrl是一个支持打印的自定义RichTextBox,它不会更改任何与打开相关的内容
  • 上面的方法是在一个单独的类中,这就是为什么它们需要传入richtextbox。

如果您需要任何其他代码,请告诉我们。 任何意见,将不胜感激!在此先感谢:)

修改 已修复,无法使用StreamWriter。

1 个答案:

答案 0 :(得分:1)

好吧,问题似乎是你没有以同样的方式保存文件。

当您执行saveAs时,您正在呼叫rtb.SaveFile。在您的沉默save中,您正在直接尝试将rtb.Text保存到文件中,但这可能不是rtb.OpenFile预期的正确格式。

我在RichTextBox中并不是专家,但在方法有效时发现差异,而另一个类似的方法通常没有帮助。

要进一步扩展,Text仅返回纯文本(无内容格式信息)。您的方法save将任何文件保存为纯文本,即使它是.rtf。另一方面,您的Open方法会尝试将.rtf文件作为格式化文本打开,这可能会导致您遇到的问题。