У меня есть файл RTF, который я хочу открыть, замените строку «TEMPLATE_Name» и сохраните.Но после сохранения файл не может снова открыться правильно.Когда я использую MS Word, файл открывается и показывает текст в формате RTF вместо текста.
Боюсь, что я нарушаю формат или кодировку, но я не знаю, как:
using (MemoryStream ms = new MemoryStream(1000))
using (StreamWriter sw = new StreamWriter(ms,Encoding.UTF8))
{
using (Stream fsSource = new FileStream(Server.MapPath("~/LetterTemplates/TestTemplate.rtf"), FileMode.Open))
using (StreamReader sr = new StreamReader(fsSource,Encoding.UTF8))
while (!sr.EndOfStream)
{
String line = sr.ReadLine();
line = line.Replace("TEMPLATE_Name", model.FirstName + " " + model.LastName);
sw.WriteLine(line);
}
ms.Position = 0;
using (FileStream fs = new FileStream(Server.MapPath("~/LetterTemplates/test.rtf"), FileMode.Create))
ms.CopyTo(fs);
}
Есть идеи о том, в чем может быть проблема?
Спасибо.
РЕШЕНИЕ: Одна проблема заключалась в том, что @BrokenGlass указал на то, что я не очищал поток.Другой была кодировка.В первой строке RTF-файла я вижу:
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\
Итак, даже не понимая ничего о RTF, я установил кодировку на кодовую страницу 1252, и она работает:
using (MemoryStream ms = new MemoryStream(1000))
using (StreamWriter sw = new StreamWriter(ms,Encoding.GetEncoding(1252)))
{
using (Stream fsSource = new FileStream(Server.MapPath("~/LetterTemplates/TestTemplate.rtf"), FileMode.Open))
using (StreamReader sr = new StreamReader(fsSource,Encoding.GetEncoding(1252)))
while (!sr.EndOfStream)
{
String line = sr.ReadLine();
line = line.Replace("TEMPLATE_Name", model.FirstName + " " + model.LastName);
sw.WriteLine(line);
}
sw.Flush();
ms.Position = 0;
using (FileStream fs = new FileStream(Server.MapPath("~/LetterTemplates/test.rtf"), FileMode.Create))
ms.CopyTo(fs);
}