XmlDocument.WriteTo tronque fichier obtenu
-
25-09-2019 - |
Question
de sérialisation d'un XmlDocument fichier. Le XmlDocument est assez grand; Cependant, dans le débogueur, je peux voir que la propriété InnerXml a tous les blob XML en elle -. ce n'est pas tronqué il
Voici le code qui écrit mon objet XmlDocument dans le fichier:
// 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();
Le fichier qui est produit ici écrit que sur la ligne comme 5760 - il est en réalité tronquée au milieu d'une étiquette!
Quelqu'un a des idées pourquoi ce serait tronquer ici?
Mise à jour: J'ai trouvé la source du problème. Je ne ferme pas l'auteur du texte XML avant de fermer le flux de fichiers! D'oh!
La solution
Le XmlTextWriter n'a pas été fermé correctement. Woops!
Autres conseils
Vous pouvez essayer de purger le flux avant la fermeture. Si AutoFlush est vrai, je pense qu'il est vidé sur Close () de toute façon, mais il pourrait être vaut le coup:
// 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();
Il est ainsi chemin ... chemin après la question posée était originale, mais il est apparu sur les résultats Google.
Je suis passé par quelque chose de semblable aujourd'hui et je voulais partager ma réponse (pour la prochaine âme malheureuse qui fait face à cette confusion).
J'utilise un StreamWriter (sw) avec un MemoryStream (ms) pour conserver les données en mémoire, puis rincer à un filestream à certains intervalles (fs).
Alors que je faisais
sw.WriteLine(DateTime.Now.ToString("u").Replace("Z", "") & ": " & entry)
Et puis après tout a été dit et fait
ms.WriteTo(fs)
fs.Flush()
fs.Close()
ms.Close()
Le problème était que je ne la chasse d'eau StreamWriter au MemoryStream premier
Altération à cette résolu mon problème.
sw.Flush()
ms.WriteTo(fs)
fs.Flush()
fs.Close()
ms.Close()
Je fait face à ce problème aujourd'hui lorsque le code est comme ci-dessous:
XmlTextWriter writer = new XmlTextWriter("IdP.xml", null);
writer.Formatting = Formatting.Indented;
xmlElement.WriteTo(writer);
Le problème a été résolu lorsque je l'ai changé comme ci-dessous:
using (XmlTextWriter writer = new XmlTextWriter("IdP.xml", null))
{
writer.Formatting = Formatting.Indented;
xmlElement.WriteTo(writer);
}
Espérons que cela est utile à quelqu'un.