2011-06-18 38 views
1

我正在使用zip文件作为xml文件的存储库,并且正在尝试保存/更新文件。通过Stream将XElement保存到ZipFile中

我有,

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()

我哪里错了?我使用.NET 3.5,所以我不能使用XElement.Save(流)

回答

3

保存到将MemoryStream后

PS,流位置是序列化的XElement结束后。我的猜测是,AddEntry和UpdateEntry不会尝试重置流位置,因此在调用这些API之前您需要自己这样做:

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

谢谢 - 我不经常使用流的.Net,所以忘记了那个小小的警告。 –