8

XmlDocumentをファイルにシリアル化しようとしています。XmlDocumentはかなり大きいです。ただし、デバッガーでは、InnerXmlプロパティにすべてのXMLBLOBが含まれていることがわかります。そこでは切り捨てられません。

XmlDocumentオブジェクトをファイルに書き込むコードは次のとおりです。

// Write that string to a file.
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write);
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented});
fileStream.Close();

ここで作成されたファイルは、5,760のような行にのみ書き出されます。実際には、タグの途中で切り捨てられます。

なぜこれがここで切り捨てられるのか、誰かが何か考えを持っていますか?

更新:問題の原因を見つけました。ファイルストリームを閉じる前に、XMLテキストライターを閉じていませんでした。D'oh!

4

4 に答える 4

7

XmlTextWriterが正しく閉じられませんでした。おっと!

于 2010-07-05T23:10:15.170 に答える
4

閉じる前にストリームをフラッシュしてみてください。AutoFlushがtrueの場合、とにかくClose()でフラッシュされると思いますが、試してみる価値があるかもしれません。

// Write that string to a file. 
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write); 
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented}); 
fileStream.Flush();
fileStream.Close(); 
于 2010-06-08T23:39:07.610 に答える
1

元の質問が出された後、それは方法です...しかし、それはグーグルの結果に現れました。

私は今日似たようなことを経験し、私の答えを共有したいと思いました(この混乱に直面する次の不幸な魂のために)。

StreamWriter(sw)とMemoryStream(ms)を使用してデータをメモリに保持し、特定の間隔でファイルストリーム(fs)にフラッシュします。

だから私はやっていた

    sw.WriteLine(DateTime.Now.ToString("u").Replace("Z", "") & ":  " & entry)

そして結局、言われ、行われた

    ms.WriteTo(fs)
    fs.Flush()
    fs.Close()
    ms.Close()

問題は、最初にStreamWriterをMemoryStreamにフラッシュしていなかったことです。

これを変更すると、問題が解決しました。

    sw.Flush()
    ms.WriteTo(fs)
    fs.Flush()
    fs.Close()
    ms.Close()
于 2012-03-21T22:48:27.113 に答える
1

今日、コードが次のようになっているときにこの問題に直面しました。

XmlTextWriter writer = new XmlTextWriter("IdP.xml", null);
writer.Formatting = Formatting.Indented;
xmlElement.WriteTo(writer);

この問題は、次のように変更したときに修正されました。

using (XmlTextWriter writer = new XmlTextWriter("IdP.xml", null))
{
    writer.Formatting = Formatting.Indented;
    xmlElement.WriteTo(writer);
}

これが誰かに役立つことを願っています。

于 2014-08-04T11:01:48.247 に答える