我使用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日志文件,而不用担心保持文件打开,并且无需担心如何处理结束标记做太多。希望你觉得它有用。

http://msdn.microsoft.com/en-us/library /aa302289.aspx

如果你不使用using语句,你需要使用的功能等。

yourXmlWriter.Flush();

yourXmlWriter.Close();

您的数据都是仍然在缓冲区中,你需要编写底层流。 (可能是一个文件或任何流...)

的https:// MSDN .microsoft.com / EN-US /库/ system.xml.xmlwriter(v = vs.110)的.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top