我正在使用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(流)
答案 0 :(得分:3)
保存到MemoryStream后,流位置在序列化XElement结束之后。我的猜测是AddEntry和UpdateEntry不会尝试重置流位置,所以在调用这些API之前你需要自己这样做:
ms.Seek(0, SeekOrigin.Begin);