题
我使用XML作家创建日志在我的应用程序的一些重要事件。
目前一切工作正常,假设应用程序正确关闭,但如果它不是,文件心不是关闭,日志基本丧失。
让我们假设一个简单的元素写的,是这样的:
writer.WriteStartElement(eventName);
writer.WriteAttributeString("t", DateTime.Now.ToString());
writer.WriteString(eventBody);
writer.WriteEndElement();
是否有任何的方式来关闭该文件在这一点上,后来,然后才剩余的元素附加到它关闭根元素和XML编写?
解决方案
您可以将指令块之后调用方法writer.Flush()。这应该写日志,你不会失去任何元素。
其他提示
在XmlWriter
类实现IDisposable
接口。也就是说,你必须确保Dispose
方法被调用您的实例。
此外,应该看到在的例子XmLWriterSettings.ConformanceLevel
。它展示了如何创建一个XmlWriter
这是确定写一个片段。可以编写每个元件一个日志条目的文件:
<SomeEvent t="20100228T134000Z">text</SomeEvent>
<SomeOtherEvent t="20100228T134100Z">text</SomeOtherEvent>
只要确保每个后冲洗作家。
把你的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技巧也。
请参阅此页面上的第一个主题,主要展示了如何避免一个XML日志文件,而不用担心保持文件打开,并且无需担心如何处理结束标记做太多。希望你觉得它有用。
如果你不使用using语句,你需要使用的功能等。
yourXmlWriter.Flush();
或
yourXmlWriter.Close();
您的数据都是仍然在缓冲区中,你需要编写底层流。 (可能是一个文件或任何流...)
的https:// MSDN .microsoft.com / EN-US /库/ system.xml.xmlwriter(v = vs.110)的.aspx
不隶属于 StackOverflow