Сохранить XElement в ZipFile через Stream - PullRequest
1 голос
/ 18 июня 2011

Я использую zip-файл в качестве хранилища для xml-файлов и пытаюсь сохранить / обновить файлы.

У меня есть,

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);
}

Но я получаю пустой xmlфайл в результате.

Хранилище открывается через using(), и его вызовы Dispose SaveFile() для каждого XML-файла, который необходимо сохранить.Затем он вызывает zip.Save(), а затем zip.Dispose().

Где я ошибаюсь?

PS Я использую .NET 3.5, поэтому я не могу использовать XElement.Save (stream)

1 Ответ

3 голосов
/ 18 июня 2011

После сохранения в MemoryStream позиция потока будет после конца сериализованного XElement. Я предполагаю, что AddEntry и UpdateEntry не пытаются сбросить позицию потока, поэтому вам нужно будет сделать это самостоятельно перед вызовом этих API:

ms.Seek(0, SeekOrigin.Begin);
...