1

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ファイルを取得します。

リポジトリは a を介して開かれ、保存が必要な各 xml ファイルusing()の Dispose 呼び出しです。次にSaveFile()、 を呼び出します。zip.Save()zip.Dispose()

どこが間違っていますか?

PS私は.NET 3.5を使用しているので、XElement.Save(stream)を使用できません

4

1 に答える 1

3

MemoryStream に保存すると、ストリームの位置はシリアル化された XElement の末尾になります。私の推測では、AddEntry と UpdateEntry はストリームの位置をリセットしようとしないため、これらの API を呼び出す前に自分でリセットする必要があります。

ms.Seek(0, SeekOrigin.Begin);
于 2011-06-18T03:00:55.873 に答える