Xmldocument.writeto truncame o arquivo resultante
-
25-09-2019 - |
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!
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.