2011-06-18 15 views
1

xmlファイルのリポジトリとしてzipファイルを使用していますが、ファイルを保存/更新しようとしています。ストリーム経由で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()で開き、保存する必要があるxmlファイルごとにDisposeの呼び出しでSaveFile()を呼び出します。その後、zip.Save()を呼び出し、次にzip.Dispose()を呼び出します。

どこが間違っていますか?私はので、私はMemoryStreamをに保存した後XElement.Save(ストリーム)

答えて

3

を使用することはできません.NET 3.5を使用してい

PSは、ストリーム位置は、シリアライズのXElementの終了後です。私の推測では、あなたが自分でそうする必要がありますのでAddEntryとUpdateEntryは、これらのAPIを呼び出す前に、ストリームの位置をリセットしようとしないことです:

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

ありがとうございました - 私は、ストリームの非常に多くの場合で.NETを使用していません、その小さな警告を忘れてしまった。 –

関連する問題