通过Stream将XElement保存到ZipFile

时间:2011-06-18 02:10:06

标签: c# xml xelement dotnetzip

我正在使用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()打开存储库,并为每个需要保存的xml文件调用SaveFile()。然后,它会调用zip.Save(),然后调用zip.Dispose()

我哪里错了?

PS我正在使用.NET 3.5,因此我无法使用XElement.Save(流)

1 个答案:

答案 0 :(得分:3)

保存到MemoryStream后,流位置在序列化XElement结束之后。我的猜测是AddEntry和UpdateEntry不会尝试重置流位置,所以在调用这些API之前你需要自己这样做:

ms.Seek(0, SeekOrigin.Begin);