2009-11-10 94 views
0

我开发在C#中的一个工具,在一种情况下我开始编写成XML文件继续用我的工具,当我突然重新启动我的机器在特定的XML文件被 损坏,原因是什么的怎样躲开它?文件处理问题

xmldocument x= new xmldocument(); 
x.open(); 
// change a value of the node every time 
x.save(); 
x=null 

这是我的代码

回答

2

使用 “安全替代模式”。例如,更换foo.txt的

  • 写入foo.new
  • 移动foo.txt的到foo.old
  • 移动foo.new到foo.txt的
  • 删除foo.old

在任何时候,您至少有一个完整的有效文件。

(即帮助,如果你要定期编写一个新的文件;对于追加,我会与答案提示XML是不是最好的前锋你一路走来)检查

0

您的档案在应用程序关闭之前正确关闭。

此外,正如有人指出的那样,一个XML文件必须正确地结束标记结束。

的更多细节也将是有益的,比如你用打开,写入和关闭文件的代码。

2

不要使用XML。

XML有一种语法不适合连续写入同一个文件,因为您总是需要最终的结束标记,除非文件完整(它永远不会与日志文件结合) , 例如)。

这意味着您将始终当您提前取消写入(通过杀死进程或重新启动计算机等)时,将获取无效的XML文件。

我们也有类似的情况已有一段时间,定居在YAML作为一个很好的格式允许简单地附加到文件中。

+1

这证明不是如此 - 尽管你需要稍微有创意,是一个单一的文件需要但很好地形成,你可以欺骗和有它有开始和结束标记的包装文件,然后包括在通过引用文件中的各个元素。这有一个好处,那就是你可以引用包装文件并对它做很好的事情(比如使用XSLT进行渲染,对于日志文件特别有用),使XML成为首要的格式 – Murph 2009-11-10 11:45:43

+0

你甚至不需要那个创意。这就是'System.Xml.ConformanceLevel.Fragment'的用途:您可以创建一个'XmlReader',它可以愉快地处理没有顶级元素的输入流中的XML元素。您甚至可以将其用作XSLT转换的输入。 – 2009-11-10 21:22:10

0

的原因为您的文件越来越损坏是由于崩溃,你永远不会关闭它。 我记得解决了这样一个问题,文件重叠标志。但是这是在C++中使用方法CreateFile。