2010-02-28 56 views
3

我正在使用XML编写器在我的应用程序中创建一些重要事件的日志。XML编写器问题

目前这一切都正常工作假设应用程序正确关闭,但如果它没有,文件没有关闭,日志基本上丢失。

让我们假设一个简单的元素写的,是这样的:

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

有什么办法来关闭该文件在这一点上,其余元素追加到它以后,然后才关闭根元素和XML作家?

回答

3

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

+0

怎么样结束标签? – 2010-02-28 20:38:38

+0

您可以在其后添加另一个writer.Flush(),然后关闭该writer。 – 2010-02-28 20:47:54

+0

我的意思是,如果应用程序在刷新之后但在结束标记被写入之前失败,该怎么办? – 2010-02-28 20:50:59

1

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

另外,您应该在XmLWriterSettings.ConformanceLevel处看到示例。它显示了如何创建一个XmlWriter,这与编写片段相符。您可以为每个元素编写一个包含一个日志条目的文档:

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

只需确保在每个元素之后刷新写入器。

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技巧。

1

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

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

+0

请谨慎复制和粘贴此代码。它已经六年了(例如,你不应该使用'XmlTextWriter'),并且缺少'IDisposable'资源周围的'使用'块。 – 2010-02-28 20:55:25

+0

链接的重要部分是Xml包含,这是所要求的技巧。 – 2010-02-28 21:02:21