我开发在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