我使用的是一個StreamWriter一個XmlSerializer如下:間歇XmlSerializer的(部分)空文件
...
string xmlFile = GetXMLLocation(objToSaveType);
XmlSerializer Serializer = new XmlSerializer(objToSaveType);
using (StreamWriter sw = new StreamWriter(xmlFile))
Serializer.Serialize(sw, objToSave);
...
這工作,絕大多數的時間,但很少生成的文件充滿了空字符,有一次,有問題的文件只能以空字符結尾,例如。
...
<Extension>0</Extension>
</OrderProductLine>
<OrderProductLine>
<ProductDescription />
<Commission>0.3</Commission>
<UnitType />
<UnitPrice>0</UnitPrice>
<UnitQuantity>0</UnitQuantity>
<PackageType />
<Extension>0</Extension>
[null x ~1 million]
我從來沒有能夠自己重現它。它不會在序列化時產生任何錯誤,而且似乎只發生在程序關閉時。
相關問題:
- here - 明顯修復,作家是不沖水;我正在使用
using
,它調用與Close()相同的Dispose() - here - 最佳答案表示錯過錯誤;我不會產生錯誤;空文件和填充了空值的文件不一樣。儘管如此,其中一個答案表明這是一個緩存問題。
我已經修改我的代碼的情況下,後面的緩存問題的想法是正確的:
string xmlFile = GetXMLLocation(objToSaveType);
XmlSerializer Serializer = new XmlSerializer(objToSaveType);
using (Stream file = new FileStream(xmlFile, FileMode.Create,
FileAccess.Write, FileShare.None,
0x1000, FileOptions.WriteThrough))
using (StreamWriter sw = new StreamWriter(file))
Serializer.Serialize(sw, objToSave);
我有解決方法(主要是一些想法,立即反序列化保存,回滾後或再試一次,如果有一問題),但解決這個問題非常好。由於它太時斷時續了,我還不知道上面是否固定了它。這篇文章要麼告訴其他人在類似的情況下可能的修復或得到其他可能原因的想法。謝謝閱讀。 (P.S.先SO貼,對不起,如果我打破任何協議!)
更新:一個多星期後,該錯誤還沒有重新出現。我的手指交叉着,雖然我真的需要大約一個月的時間來合理確定地知道這些固定的東西。
更新:兩個半星期後,還是不錯的。
希望最後更新:一個多月後,仍然不錯。好吧,緩存似乎成了問題!
我們也看到了這個錯誤;它主要發生在「現場」(我們注意到,當客戶抱怨他們丟失了數據)。你使用哪個版本的.Net? – habakuk 2012-08-03 10:12:00
@habakuk我正在使用.NET 4.0。 – jemidiah 2012-08-03 21:39:33