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

Error when opening a (silently) saved file c#

我一直在用 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 ""; }
    }

其他信息:

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

编辑: 已修复,无法使用 StreamWriter。

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

当您执行 saveAs 时,您正在调用 rtb.SaveFile。在您的无声 save 中,您直接尝试将 rtb.Text 保存到文件中,但这可能不是 rtb.OpenFile 期望的正确格式。

我不是 RichTextBox 方面的专家,但发现方法有效和另一个类似方法的区别通常没有帮助。

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