Domanda

sto usando Writer XML per creare un log di alcuni eventi importanti nella mia applicazione.

Al momento tutto funziona benissimo partendo dal presupposto che l'applicazione è chiuso correttamente, ma se isnt, il file non sia chiuso e il registro è fondamentalmente perso.

Supponiamo la scrittura di un elemento semplice, qualcosa di simile a questo:

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

C'è un modo per chiudere il file a questo punto e aggiungere i restanti elementi in un secondo momento e solo allora di chiudere l'elemento radice e xml scrittore?

È stato utile?

Soluzione

È possibile chiamare il metodo writer.Flush () dopo che il blocco di istruzioni. Questo dovrebbe scrivere il log e non si perde alcun elemento.

Altri suggerimenti

La classe XmlWriter implementa l'interfaccia IDisposable. Ciò significa che è necessario assicurarsi che il metodo Dispose viene chiamato su propria istanza.

Inoltre, si dovrebbe vedere l'esempio a XmLWriterSettings.ConformanceLevel . Essa mostra come creare un XmlWriter che è ok con la scrittura di un frammento. È possibile scrivere un documento con una voce di registro per elemento:

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

Basta essere sicuri di svuotare lo scrittore dopo ogni.

Metti la tua XmlWriter in un'istruzione using;

    using (XmlWriter writer = XmlWriter.Create(stream))
    {
        writer.WriteStartElement("logentry");
        writer.WriteAttributeString("t", DateTime.Now.ToString());
        writer.WriteString("Something to log.");
        writer.WriteEndElement();
    }

Probabilmente dovrete fare alcuni trucchi XmlDocumentFragment anche.

Si veda il primo argomento in questa pagina, mostra praticamente come mantenere un file di registro XML, senza preoccuparsi di mantenere il file aperto, e senza preoccuparsi di cosa fare con il tag di chiusura troppo. Spero vi sia utile.

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

Se non si utilizza l'istruzione using, è necessario utilizzare una funzione come

yourXmlWriter.Flush();

o

yourXmlWriter.Close();

I tuoi dati sono ancora nel buffer ed è necessario scrivere nel flusso sottostante. (Potrebbe essere un file o qualsiasi flusso ...)

https: // msdn .microsoft.com / en-us / library / System.Xml.XmlWriter (v = vs.110) aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top