Я делаю текстовый редактор в C# и недавно добавил функциональность для тихого сохранения файла (без SaveFileDialog). Файл выглядит правильно, но при попытке открыть файл я получаю сообщение об ошибке System.ArgumentException - File format is not valid
. Он отлично открывается, если файл не был сохранен без помех.Ошибка при открытии (молча) сохраненного файла C#
Код:
способа сохранения:
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 ""; }
}
и Open:
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 быть переданы в.
Если вам нужен какой-либо другой код, просто дайте мне знать. Любой совет будет оценен! Заранее спасибо :)
EDIT: Исправлено, не удалось использовать StreamWriter.
Как в стороне, сейчас самое подходящее время, чтобы начать следовать соглашениям об именовании .NET, используя инструкции 'using' и узнав о таких методах, как' File.WriteAllText'. –
@ JonSkeet Вы имеете в виду столицу, чтобы начать имена? Я пишу так, потому что я привык к Java-именованию ... Я постараюсь начать следовать соглашениям :) – criticaldiamonds
Да, точно. Я знаю, что есть соблазн придерживаться ваших предыдущих соглашений, но действительно стоит приложить усилия, чтобы следовать конвенциям на языке, который вы на самом деле используете. –