3

XML Writerを使用して、アプリケーション内のいくつかの重要なイベントのログを作成しています。

現在、アプリケーションが正しく閉じられていれば、すべて正常に機能しますが、閉じられていない場合、ファイルは閉じられず、ログは基本的に失われます。

次のような単純な要素の記述を想定しましょう。

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

この時点でファイルを閉じ、後で残りの要素をファイルに追加してから、ルート要素とxmlライターを閉じる方法はありますか?

4

5 に答える 5

3

命令のブロックの後で、メソッドwriter.Flush()を呼び出すことができます。これによりログが書き込まれ、要素が失われることはありません。

于 2010-02-28T20:38:01.893 に答える
1

XmlWriterクラスはインターフェースを実装しますIDisposable。つまりDispose、インスタンスでメソッドが呼び出されていることを確認する必要があります。

さらに、の例を参照してくださいXmLWriterSettings.ConformanceLevelXmlWriterフラグメントを記述しても問題ないを作成する方法を示しています。要素ごとに1つのログエントリを持つドキュメントを作成できます。

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

毎回、必ずライターをフラッシュしてください。

于 2010-02-28T20:42:04.097 に答える
1

XmlWriterをusingステートメントに入れます。

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

おそらく、XmlDocumentFragmentのトリックもいくつか実行する必要があります。

于 2010-02-28T20:49:28.763 に答える
1

このページの最初のトピックを参照してください。基本的に、ファイルを開いたままにすることを気にせずに、また終了タグをどうするかを気にせずにXMLログファイルを保持する方法を示します。お役に立てば幸いです。

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

于 2010-02-28T20:50:25.127 に答える
0

usingステートメントを使用しない場合は、次のような関数を使用する必要があります。

yourXmlWriter.Flush();

また

yourXmlWriter.Close();

データはまだバッファにあり、基になるストリームに書き込む必要があります。(ファイルまたは任意のストリームである可能性があります...)

https://msdn.microsoft.com/en-us/library/system.xml.xmlwriter(v=vs.110).aspx

于 2016-10-19T11:18:49.353 に答える