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?

War es hilfreich?

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.

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top