XMLDocument.WriteTo Усекивает результируемый файл
-
25-09-2019 - |
Вопрос
Пытаясь сериализовать XMLDocument в файл. XMLDocument довольно большой; Однако в отладчике я вижу, что свойство InnerxML имеет все в нем все XML-блоб - он там не обрезан.
Вот код, который пишет мой объект XMLDocument к файлу:
// Write that string to a file.
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write);
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented});
fileStream.Close();
Файл, который производится здесь, только пишет в строку, как 5,760 - на самом деле усекается в середине тега!
У кого-нибудь есть какие-либо идеи, почему это укорется здесь?
Обновлять: Я нашел источник проблемы. Я не закрывал текстовый писатель XML перед закрытием потока файлов! Ох!
Решение
XMLTextWriter не был замкнут должным образом. Создание!
Другие советы
Вы можете попробовать промыть поток перед закрытием. Если autoFlush верно, я думаю, что он покраснется на близких () в любом случае, но это может стоить выстрела:
// Write that string to a file.
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write);
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented});
fileStream.Flush();
fileStream.Close();
Есть путь путь ... после того, как первоначальный вопрос спросил, но он появился в результатах Google.
Я прошел через что-то похожее сегодня и хотел поделиться своим ответом (для следующей неудачной души, которая сталкивается с этой путаницей).
Я использую Streamwriter (SW) с MemoryStream (MS), чтобы сохранить данные в памяти, а затем вымыть в FileStream (FS) с определенными интервалами.
Так что я делал
sw.WriteLine(DateTime.Now.ToString("u").Replace("Z", "") & ": " & entry)
А потом ведь было сказано и сделано
ms.WriteTo(fs)
fs.Flush()
fs.Close()
ms.Close()
Проблема заключалась в том, что я не был промыть StreamWriter на MemoryStream первым
Изменение этого разрешено мою проблему.
sw.Flush()
ms.WriteTo(fs)
fs.Flush()
fs.Close()
ms.Close()
Я столкнулся с этим вопросом сегодня, когда код был ниже:
XmlTextWriter writer = new XmlTextWriter("IdP.xml", null);
writer.Formatting = Formatting.Indented;
xmlElement.WriteTo(writer);
Проблема была исправлена, когда я изменил его, как показано ниже:
using (XmlTextWriter writer = new XmlTextWriter("IdP.xml", null))
{
writer.Formatting = Formatting.Indented;
xmlElement.WriteTo(writer);
}
Надеюсь, это полезно для кого-то.