我正在使用XML Writer在我的应用程序中创建一些重要事件的日志。
目前一切正常,假设应用程序已正确关闭,但如果不是,则文件未关闭且日志基本上丢失。
让我们假设写一个简单的元素,如下所示:
writer.WriteStartElement(eventName);
writer.WriteAttributeString("t", DateTime.Now.ToString());
writer.WriteString(eventBody);
writer.WriteEndElement();
有没有办法在此时关闭文件并稍后将其余元素附加到它,然后才关闭根元素和xml编写器?
答案 0 :(得分:3)
您可以在指令块之后调用方法writer.Flush()。这应该写日志,你不会丢失任何元素。
答案 1 :(得分:1)
XmlWriter
类实现IDisposable
接口。这意味着您必须确保在您的实例上调用Dispose
方法。
此外,您应该在XmLWriterSettings.ConformanceLevel
看到示例。它显示了如何创建XmlWriter
,这对于编写片段是可以的。您可以编写一个文档,每个元素只有一个日志条目:
<SomeEvent t="20100228T134000Z">text</SomeEvent>
<SomeOtherEvent t="20100228T134100Z">text</SomeOtherEvent>
请务必在每个人之后冲洗作家。
答案 2 :(得分:1)
将您的XmlWriter放入using语句中;
using (XmlWriter writer = XmlWriter.Create(stream))
{
writer.WriteStartElement("logentry");
writer.WriteAttributeString("t", DateTime.Now.ToString());
writer.WriteString("Something to log.");
writer.WriteEndElement();
}
你可能还需要做一些XmlDocumentFragment技巧。
答案 3 :(得分:1)
请参阅本页的第一个主题,主要说明如何保留XML日志文件,而不必担心保持文件打开,也不必担心如何处理结束标记。希望你觉得它很有用。
答案 4 :(得分:0)
如果您不使用using语句,则需要使用类似
的函数yourXmlWriter.Flush();
或
yourXmlWriter.Close();
您的数据仍在缓冲区中,您需要写入基础流。 (可以是文件或任何流......)
https://msdn.microsoft.com/en-us/library/system.xml.xmlwriter(v=vs.110).aspx