我一直在用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。
答案 0 :(得分:1)
好吧,问题似乎是你没有以同样的方式保存文件。
当您执行saveAs
时,您正在呼叫rtb.SaveFile
。在您的沉默save
中,您正在直接尝试将rtb.Text
保存到文件中,但这可能不是rtb.OpenFile
预期的正确格式。
我在RichTextBox
中并不是专家,但在方法有效时发现差异,而另一个类似的方法通常没有帮助。
要进一步扩展,Text
仅返回纯文本(无内容格式信息)。您的方法save
将任何文件保存为纯文本,即使它是.rtf。另一方面,您的Open
方法会尝试将.rtf
文件作为格式化文本打开,这可能会导致您遇到的问题。