Pergunta

Tentando serializar um XMLDocument ao arquivo. O XMLDocument é bastante grande; No entanto, no depurador, posso ver que a propriedade InnerXML possui toda a Blob XML - ela não está truncada lá.

Aqui está o código que grava meu objeto Xmldocument no arquivo:

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

O arquivo que é produzido aqui apenas escreve para alinhar como 5.760 - na verdade é truncado no meio de uma tag!

Alguém tem alguma idéia por que isso truncaria aqui?

Atualizar: Encontrei a fonte da questão. Eu não estava fechando o escritor de texto XML antes de fechar o fluxo de arquivos! D'HO!

Foi útil?

Solução

O XMLTextWriter não foi fechado corretamente. Woops!

Outras dicas

Você pode tentar liberar o fluxo antes de fechar. Se o Autoflush for verdadeiro, acho que é corado de qualquer maneira () de qualquer maneira, mas pode valer a pena ter uma foto:

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

É muito o caminho ... depois que a pergunta original foi feita, mas apareceu nos resultados do Google.

Passei por algo semelhante hoje e queria compartilhar minha resposta (para a próxima alma infeliz que enfrenta essa confusão).

Estou usando um StreamWriter (SW) com um MemoryStream (MS) para manter os dados na memória e, em seguida, liberar para um FileStream (FS) em determinados intervalos.

Então eu estava fazendo

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

E depois de tudo foi dito e feito

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

O problema era que eu não estava lavando o escritor de stream para o MemoryStream primeiro

Alterando para isso resolveu meu problema.

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

Eu enfrentei esse problema hoje quando o código estava abaixo:

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

O problema foi corrigido quando mudei como abaixo:

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

Espero que isso seja útil para alguém.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top