Frage
Ich bin mit XML-Writer ein Protokoll über einige wichtige Ereignisse in meiner Anwendung zu erstellen.
Aktuelle Zeit alles funktioniert gut unter der Annahme, dass die Anwendung korrekt geschlossen ist, aber wenn es nicht ist, wird die Datei ist nicht geschlossen und das Protokoll im Grunde verloren.
Nehmen wir an, das Schreiben eines einfachen Element, so etwas wie folgt aus:
writer.WriteStartElement(eventName);
writer.WriteAttributeString("t", DateTime.Now.ToString());
writer.WriteString(eventBody);
writer.WriteEndElement();
Gibt es eine Möglichkeit, die Datei an dieser Stelle und fügen Sie die übrigen Elemente, um es später und erst dann schließt das Stammelement und XML-Writer zu schließen?
Lösung
können Sie die Methode writer.Flush () aufrufen, nach dem Block von Anweisungen. Dies sollte das Protokoll schreiben und Sie werden kein Element verlieren.
Andere Tipps
Die XmlWriter
Klasse implementiert die IDisposable
Schnittstelle. Das heißt, müssen Sie sicherstellen, dass die Dispose
Methode auf die Instanz aufgerufen wird.
Darüber hinaus sollten Sie das Beispiel sehen unter XmLWriterSettings.ConformanceLevel
. Es zeigt, wie ein XmlWriter
zu schaffen, die mit dem Schreiben ein Fragment in Ordnung ist. Sie können ein Dokument mit einem Protokolleintrag pro Element schreiben:
<SomeEvent t="20100228T134000Z">text</SomeEvent>
<SomeOtherEvent t="20100228T134100Z">text</SomeOtherEvent>
Nur sicher sein, den Schriftsteller nach jedem spülen.
Setzen Sie Ihre XmlWriter in einer using-Anweisung;
using (XmlWriter writer = XmlWriter.Create(stream))
{
writer.WriteStartElement("logentry");
writer.WriteAttributeString("t", DateTime.Now.ToString());
writer.WriteString("Something to log.");
writer.WriteEndElement();
}
Sie werden wahrscheinlich zu tun haben, auch einige XmlDocumentFragment Tricks.
Sehen Sie das erste Thema auf dieser Seite, im Grunde zeigt, wie eine XML-Protokolldatei zu halten, ohne sich Gedanken über die Datei offen zu halten, und ohne sich Gedanken darüber, was mit dem schließenden Tag zu tun. Hoffe, Sie finden es nützlich.
Wenn Sie die Anweisung using nicht verwenden, müssen Sie sich wie eine Funktion verwenden
yourXmlWriter.Flush();
oder
yourXmlWriter.Close();
Ihre Daten sind noch in dem Puffer, und Sie müssen den zugrunde liegenden Stream schreiben. (Könnte eine Datei oder einen Strom sein ...)
https: // msdn .microsoft.com / en-us / library / System.Xml.XmlWriter (v = vs.110) aspx