2010-02-28 4 views
3

Я использую XML Writer для создания журнала важных событий в моем приложении.Вопрос XML-писателя

В настоящее время все работает нормально, предполагая, что приложение правильно закрыто, но если это не так, файл не закрыт и журнал в основном потерян.

Давайте предположим, что написание простого элемента, что-то вроде этого:

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

Есть ли способ, чтобы закрыть файл в этой точке и добавить остальные элементы к нему позже, и только потом закрывать корневой элемент и xml writer?

ответ

3

Вы можете вызвать метод writer.Flush() после вашего блока инструкций. Это должно написать журнал, и вы не потеряете ни одного элемента.

+0

насчет конечного тега? –

+0

Вы можете добавить еще один writer.Flush() после него, а затем закрыть автора. –

+0

Я имел в виду, что, если приложение выходит из строя после флеша, но до конца тег может быть записан? –

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». –

+0

Важной частью ссылки является включение Xml, это трюк с запрошенными потребностями. –

0

Если вы не используете, используя заявление, вам нужно использовать функцию как

yourXmlWriter.Flush(); 

или

yourXmlWriter.Close(); 

Вашие данные все еще находятся в буфере, и вы необходимо записать в базовый поток. (Может быть файл или любой поток ...)

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

 Смежные вопросы

  • Нет связанных вопросов^_^