2010-06-08 6 views
8

versucht, ein XmlDocument Datei zu serialisieren. Das XmlDocument ist ziemlich groß; Im Debugger kann ich jedoch sehen, dass die InnerXml-Eigenschaft den gesamten XML-Blob enthält - sie ist dort nicht abgeschnitten.XmlDocument.WriteTo abschneidet resultierende Datei

Hier ist der Code, dass meine XmlDocument Objekt-Datei schreibt:

// 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(); 

Die Datei, die hier produziert wird, schreibt nur, um Zeile wie 5760 - in der Mitte von einem Tag tatsächlich abgeschnitten wird!

Wer irgendwelche Ideen, warum dies hier gestutzt würde?

Update: Ich habe die Ursache des Problems gefunden. Ich habe den XML Text Writer nicht geschlossen, bevor ich den Dateistrom geschlossen habe! Oh!

Antwort

7

Die XmlTextWriter nicht richtig geschlossen wurde. Hoppla!

+0

Eine einfache Regel: "Wenn sie entsorgbar ist, muss sie irgendwo entsorgt werden" ("Dispose" bei Streams und Writern wird gespült und geschlossen). –

4

können Sie versuchen, den Strom zu spülen vor dem Schließen. Wenn Autoflush wahr ist, ich denke, es auf Schließen gespült wird() sowieso, aber es könnte einen Versuch wert sein:

// 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(); 
+0

Hey Paul, danke für den Vorschlag. Ich hatte tatsächlich daran gedacht (Entschuldigung, hätte das in der Originalpost ansprechen sollen), aber ich habe das gleiche Ergebnis bekommen. Ebenso habe ich versucht, die Codierung zu wechseln, da ich dachte, dass es dort eine Art Problem geben könnte, ohne Erfolg. Irgendwelche anderen Ideen? –

1

Es Weg Weg Weg ..., nachdem die ursprüngliche Frage gestellt wurde, aber es zeigte auf Google Ergebnissen.

Ich ging durch etwas ähnliches heute und wollte meine Antwort teilen (für die nächste unglückliche Seele, die diese Verwirrung steht).

Ich bin mit einem Streamwriter (sw) mit einem Memorystream (ms) Daten im Speicher zu halten und dann zu einem Filestream auszuzuspülen (fs) in bestimmten Intervallen.

So war ich

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

tue Und dann schließlich wurde gesagt und getan

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

Problem war, dass ich nicht die Streamwriter auf die Memory Spülung wurde zuerst

Altering zu Das hat mein Problem gelöst.

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

stand ich dieses Problem heute, wenn der Code wie unten war:

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

Das Problem wurde behoben, wenn ich es wie unten geändert:

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

Hoffe, das ist nützlich, um jemand .

Verwandte Themen