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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top