質問
私は自分のアプリケーションでいくつかの重要なイベントのログを作成するために、XMLライターを使用しています。
現在、それはすべてのアプリケーションが正しく閉じられていると仮定して罰金を動作しますが、それはイマイチ場合は、ファイルイマイチが閉じられ、ログが基本的に失われます。
レッツは、単純な要素の書き込みを前提とし、このような何かます:
writer.WriteStartElement(eventName);
writer.WriteAttributeString("t", DateTime.Now.ToString());
writer.WriteString(eventBody);
writer.WriteEndElement();
は、この時点でファイルを閉じて、ルート要素とxmlライターを閉じ、後だけにして、それに残りの要素を追加する方法はありますか?
解決
あなたは、命令のあなたのブロックの後、メソッドwriter.Flush()を呼び出すことができます。これは、ログを書き込む必要がありますし、任意の要素を失うことはありません。
他のヒント
XmlWriter
クラスはIDisposable
インタフェースを実装しています。ことを意味しますがDispose
メソッドがインスタンス上で呼び出されたことを確認する必要があります。
また、あなたはでの例を参照してください必要がありますXmLWriterSettings.ConformanceLevel
する。これは、フラグメントを書くことでokですXmlWriter
を作成する方法を示しています。あなたは、要素ごとに1つのログエントリで文書を書くことができます:
<SomeEvent t="20100228T134000Z">text</SomeEvent>
<SomeOtherEvent t="20100228T134100Z">text</SomeOtherEvent>
ただ、それぞれの後にライターをフラッシュするようにしてくださいます。
usingステートメントであなたのXmlWriterを入れ;
using (XmlWriter writer = XmlWriter.Create(stream))
{
writer.WriteStartElement("logentry");
writer.WriteAttributeString("t", DateTime.Now.ToString());
writer.WriteString("Something to log.");
writer.WriteEndElement();
}
あなたはおそらく、いくつかのたXMLDocumentFragmentのトリックを行う必要があるでしょう。
このページの最初のトピックを参照してください、開いているファイルを保つことを気にすることなく、XMLログファイルを維持するための方法を基本的に示している、とあまりにも終了タグをどうするかを気にせずに。あなたはそれが役に立つことを願っています。
、次のような機能を使用する必要があります。
yourXmlWriter.Flush();
または
yourXmlWriter.Close();
あなた件のデータがバッファに残っていると、あなたは、基になるストリームに書き込む必要があります。 (...ファイルまたはストリームのだろう)。
ます。https:// MSDN .microsoft.com / EN-US /ライブラリ/ system.xml.xmlwriter(V = vs.110).aspxのの