我開發在C#中的一個工具,在一種情況下我開始編寫成XML文件繼續用我的工具,當我突然重新啓動我的機器在特定的XML文件被 損壞,原因是什麼的怎樣躲開它?文件處理問題
xmldocument x= new xmldocument();
x.open();
// change a value of the node every time
x.save();
x=null
這是我的代碼
我開發在C#中的一個工具,在一種情況下我開始編寫成XML文件繼續用我的工具,當我突然重新啓動我的機器在特定的XML文件被 損壞,原因是什麼的怎樣躲開它?文件處理問題
xmldocument x= new xmldocument();
x.open();
// change a value of the node every time
x.save();
x=null
這是我的代碼
使用 「安全替代模式」。例如,更換foo.txt的
在任何時候,您至少有一個完整的有效文件。
(即幫助,如果你要定期編寫一個新的文件;對於追加,我會與答案提示XML是不是最好的前鋒你一路走來)檢查
您的檔案在應用程序關閉之前正確關閉。
此外,正如有人指出的那樣,一個XML文件必須正確地結束標記結束。
的更多細節也將是有益的,比如你用打開,寫入和關閉文件的代碼。
不要使用XML。
XML有一種語法不適合連續寫入同一個文件,因爲您總是需要最終的結束標記,除非文件完整(它永遠不會與日誌文件結合) , 例如)。
這意味着您將始終當您提前取消寫入(通過殺死進程或重新啓動計算機等)時,將獲取無效的XML文件。
我們也有類似的情況已有一段時間,定居在YAML作爲一個很好的格式允許簡單地附加到文件中。
的原因爲您的文件越來越損壞是由於崩潰,你永遠不會關閉它。 我記得解決了這樣一個問題,文件重疊標誌。但是這是在C++中使用方法CreateFile。
這證明不是如此 - 儘管你需要稍微有創意,是一個單一的文件需要但很好地形成,你可以欺騙和有它有開始和結束標記的包裝文件,然後包括在通過引用文件中的各個元素。這有一個好處,那就是你可以引用包裝文件並對它做很好的事情(比如使用XSLT進行渲染,對於日誌文件特別有用),使XML成爲首要的格式 – Murph 2009-11-10 11:45:43
你甚至不需要那個創意。這就是'System.Xml.ConformanceLevel.Fragment'的用途:您可以創建一個'XmlReader',它可以愉快地處理沒有頂級元素的輸入流中的XML元素。您甚至可以將其用作XSLT轉換的輸入。 – 2009-11-10 21:22:10