2012-08-15 45 views
0

我在流式傳輸到文件時遇到問題,我確定有一個簡單的解決方案,但我正在努力尋找它!我試圖做的事情非常簡單,我得到一個類的內容並將它們序列化爲XML並將它們流式傳輸到一個文件中。我使用的代碼是:XmlSerializer和/或StreamWriter沒有釋放它們的內容

ObservableCollection<RackItemViewModel> rackVMs = ProjectTree.GetTreeData(); 

XmlSerializer serializer = new XmlSerializer(typeof(RackItem)); 
using (TextWriter tw = new StreamWriter(filename, false)) 
{ 
    foreach (RackItemViewModel VM in rackVMs) 
     serializer.Serialize(tw, VM.RackItem); 
} 

ProjectTree.GetTreeData()只是返回要序列化的數據。如果我運行程序並保存數據,所有數據都按預期工作,則數據將被保存並可通過反序列化讀回。我遇到的問題是當我執行多個保存時。如果我將一組數據保存到一個文件,然後將另一組數據保存到另一個文件,則第一個文件是正確的,但第二個文件是第一個文件和第二個文件的拼接!似乎流或XMLSerializer不會在保存之間釋放它們的內容。我試過使用writefile而不是Stream,但我仍然遇到同樣的問題,我也嘗試刷新並關閉流,但這沒有任何作用。毋庸置疑,如果我關閉並重新啓動應用程序保存它一切正常。 有誰能告訴我我做錯了嗎?

+0

正如我在下面發佈的 - 是否有其他一些代碼?由於據我所知,寫入一個文件,然後另一個文件需要使用兩個獨立的StreamWriters,所以我認爲你有更多的代碼,我們沒有看到... – Charleh 2012-08-15 09:44:54

回答

0

我想我會整理這個線程,因爲我已經設法解決這個問題。事實證明,這與數據的序列化或數據流無關。正在寫入的數據緩衝區在寫入之間沒有完全釋放數據。我正在檢查視圖模型對象,但是正在寫入的對象(RackItem)沒有跟隨套件。愚蠢的錯誤,我的一部分。感謝您的建議。

0

在寫入新文件之前,請嘗試刷新流tw.Flush()

+0

可悲的是我試過tw.flush和tw.close哪些沒有幫助。上面的代碼包含在一個方法(PerformSave)中,該方法通過File,Save菜單調用。用戶只需調用一次即可正常工作,然後用不同的數據再次調用它,這就是問題發生的地方。 – Marcus 2012-08-15 10:15:42