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)

Foi útil?

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
scroll top