2010-02-28 57 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