XmlDocument不完整地保存文件

时间:2015-01-30 11:14:33

标签: c# xml xamarin xamarin.android xmldocument

我有一个简单的代码,可以修改现有的XML文件,如下所示:

roomsfile = new File(Path.Combine(rootDir, "rooms.dat"));    
XmlDocument roomdata = new XmlDocument();
roomdata.Load(roomsfile.AbsolutePath);
XmlElement root = roomdata.DocumentElement;
XmlNode roomNode = roomdata.CreateElement("room");
XmlNode noNode = roomdata.CreateElement("no");
XmlNode nameNode = roomdata.CreateElement("name");

//roomNo and roomName are text fields
noNode.InnerText = roomNo.Text; 
nameNode.InnerText = roomName.Text;

roomNode.AppendChild(noNode);
roomNode.AppendChild(nameNode);
root.AppendChild(roomNode);

roomdata.Save(roomsdat.AbsolutePath);

我的原始XML文件是:

<?xml version="1.0" encoding="utf-8"?>
<rooms>
  <room>
    <no>101</no>
    <name>Reception</name>
  </room>
  <room>
    <no>102</no>
    <name>Manager Room</name>
  </room>
</rooms>

当我运行代码时,它将文件转换为:

<?xml version="1.0" encoding="utf-8"?>
<rooms>
  <room>
    <no>101</no>
    <name>Reception</name>
  </room>
  <room>
    <no>102</no>
    <name>Manager Room</name>
  </room>
  <room> 
    <

所以它显然不完整。然后当我尝试使用该文件时,它破坏了我的应用程序。什么会导致这种行为?

为了记录,此应用程序正在Visual Studio 2013中的Xamarin(MonoDroid)上编写。

1 个答案:

答案 0 :(得分:0)

好的,所以我发现这只是我的XML文件显示的方式,而应用程序仍在使用它。即使我将文件复制到我的PC并使用Notepad ++查看它,它似乎仍然被打破。但该应用程序正如预期的那样使用它,没有任何问题(这显然是另一个问题,以前打破了它)。如果你问我,这是一种奇怪的行为。但我不会再深入了解它。

无论如何,在评论中,dbc指出了一个关于覆盖文件的简单但很酷的提示,我认为这对于防止任何应用程序中潜在的损坏文件问题至关重要。在我的编码生涯的其余部分中,我将使用它作为经验法则:

  

写入新文件,然后删除旧文件并重命名新文件,实际上是一种很好的做法。这样,如果在写入文件时发生任何事情(例如磁盘已填满,或者用户杀死了您的进程),则原始文件不会受到影响。