2010-06-08 9 views
8

Tentativo di serializzare un XmlDocument in un file. L'XmlDocument è piuttosto grande; tuttavia, nel debugger posso vedere che la proprietà InnerXml ha tutto il blob XML al suo interno - non è troncata lì.XmlDocument.WriteTo tronca il file risultante

Ecco il codice che scrive il mio oggetto XmlDocument in file:

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

Il file che si produce qui scrive solo per linea come 5.760 - in realtà è troncato nel bel mezzo di un tag!

Qualcuno ha qualche idea del perché questo sarebbe troncato qui?

Aggiornamento: Ho trovato la fonte del problema. Non stavo chiudendo XML Text Writer prima di chiudere il flusso di file! D'oh!

risposta

7

La XmlTextWriter non è stato chiuso correttamente. Woops!

+0

Una semplice regola da seguire: "se è usa e getta, qualcuno da qualche parte deve disporne" ('Dispose' su stream e gli scrittori eseguiranno il flush & close). –

4

È possibile provare a Lavare il flusso prima della chiusura. Se AutoFlush è vero, penso che si svuota su Close() in ogni caso, ma forse vale la pena un colpo:

// 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, grazie per il suggerimento. In realtà avevo pensato a quello (scusa, avrei dovuto chiamarlo nel post originale) ma ho ottenuto lo stesso risultato. Allo stesso modo, ho provato a cambiare la codifica, pensando che potrebbe esserci un qualche tipo di problema lì, senza successo. Altre idee? –

1

È via di mezzo ... dopo che è stata posta la domanda originale, ma è apparsa sui risultati di Google.

Ho attraversato qualcosa di simile oggi e ho voluto condividere la mia risposta (per la prossima anima sfortunata che affronta questa confusione).

Sto utilizzando StreamWriter (sw) con un MemoryStream (ms) per conservare i dati in memoria e quindi eseguire il flush out su un filestream (fs) a determinati intervalli.

Così stavo facendo

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

E poi, dopo tutto è stato detto e fatto

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

problema era che non ero il lavaggio del StreamWriter per il MemoryStream prima

Alterazione di questo ha risolto il mio problema.

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

Ho affrontato questo problema oggi, quando il codice è stato, come di seguito:

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

Il problema è stato risolto quando ho cambiato come qui sotto:

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

Spero che questo è utile a qualcuno .

Problemi correlati