質問

私は自分のアプリケーションでいくつかの重要なイベントのログを作成するために、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ログファイルを維持するための方法を基本的に示している、とあまりにも終了タグをどうするかを気にせずに。あなたはそれが役に立つことを願っています。

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

あなたが使用してステートメントを使用していない場合は、

、次のような機能を使用する必要があります。

yourXmlWriter.Flush();

または

yourXmlWriter.Close();

あなた件のデータがバッファに残っていると、あなたは、基になるストリームに書き込む必要があります。 (...ファイルまたはストリームのだろう)。

ます。https:// MSDN .microsoft.com / EN-US /ライブラリ/ system.xml.xmlwriter(V = vs.110).aspxの

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top