Salvar XElement no ZipFile via Stream
Pergunta
Estou usando um arquivo zip como repositório para arquivos xml e estou tentando salvar / atualizar arquivos.
Sim,
protected override void SaveFile()
{
MemoryStream ms = new MemoryStream();
var sr = new StreamWriter(ms);
table.Save(sr); // XElement table is filled elsewhere
ZipEntry entry = Repository.zip.Entries.FirstOrDefault(z => z.FileName == path);
if (null == entry)
Repository.zip.AddEntry(path, ms);
else
Repository.zip.UpdateEntry(path, ms);
}
Mas recebo um arquivo xml vazio como resultado.
O repositório é aberto por meio de um using()
e seu Dispose chama SaveFile()
para cada arquivo xml que precisa ser salvo.Em seguida, ele chama zip.Save()
e, em seguida, zip.Dispose()
.
Onde estou errado?
PS Estou usando o .NET 3.5, então não posso usar o XElement.Save (stream)
Solução
Depois de salvar no MemoryStream, a posição do stream é após o final do XElement serializado.Meu palpite é que AddEntry e UpdateEntry não tentam redefinir a posição do fluxo, portanto, você mesmo precisará fazer isso antes de chamar essas APIs:
ms.Seek(0, SeekOrigin.Begin);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow