3

我正在使用 XML Writer 在我的应用程序中创建一些重要事件的日志。

目前,假设应用程序已正确关闭,一切正常,但如果未正确关闭,则文件未关闭并且日志基本上丢失。

让我们假设编写一个简单的元素,如下所示:

 writer.WriteStartElement(eventName);
 writer.WriteAttributeString("t", DateTime.Now.ToString());
 writer.WriteString(eventBody);
 writer.WriteEndElement();

有没有办法在此时关闭文件并稍后将剩余元素附加到它,然后才关闭根元素和 xml 编写器?

4

5 回答 5

3

您可以在指令块之后调用方法 writer.Flush()。这应该写日志,你不会丢失任何元素。

于 2010-02-28T20:38:01.893 回答
1

该类XmlWriter实现IDisposable接口。这意味着您必须确保Dispose在您的实例上调用该方法。

此外,您应该在 中查看示例XmLWriterSettings.ConformanceLevel。它展示了如何创建一个XmlWriter可以编写片段的内容。您可以编写每个元素一个日志条目的文档:

<SomeEvent t="20100228T134000Z">text</SomeEvent>
<SomeOtherEvent t="20100228T134100Z">text</SomeOtherEvent>

请确保在每次之后冲洗作家。

于 2010-02-28T20:42:04.097 回答
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 技巧。

于 2010-02-28T20:49:28.763 回答
1

请参阅此页面上的第一个主题,基本上展示了如何保留 XML 日志文件,而不用担心保持文件打开,也不必担心如何处理结束标记。希望你觉得它有用。

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

于 2010-02-28T20:50:25.127 回答
0

如果不使用 using 语句,则需要使用类似的函数

yourXmlWriter.Flush();

或者

yourXmlWriter.Close();

您的数据仍在缓冲区中,您需要写入底层流。(可以是文件或任何流...)

https://msdn.microsoft.com/en-us/library/system.xml.xmlwriter(v=vs.110).aspx

于 2016-10-19T11:18:49.353 回答