XML Writer问题

时间:2010-02-28 20:32:15

标签: c# .net xml xmlwriter

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

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

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

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

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

5 个答案:

答案 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日志文件,而不必担心保持文件打开,也不必担心如何处理结束标记。希望你觉得它很有用。

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

答案 4 :(得分:0)

如果您不使用using语句,则需要使用类似

的函数
yourXmlWriter.Flush();

yourXmlWriter.Close();

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

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