我有一个简单的代码,可以修改现有的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)上编写。
答案 0 :(得分:0)
好的,所以我发现这只是我的XML文件显示的方式,而应用程序仍在使用它。即使我将文件复制到我的PC并使用Notepad ++查看它,它似乎仍然被打破。但该应用程序正如预期的那样使用它,没有任何问题(这显然是另一个问题,以前打破了它)。如果你问我,这是一种奇怪的行为。但我不会再深入了解它。
无论如何,在评论中,dbc指出了一个关于覆盖文件的简单但很酷的提示,我认为这对于防止任何应用程序中潜在的损坏文件问题至关重要。在我的编码生涯的其余部分中,我将使用它作为经验法则:
写入新文件,然后删除旧文件并重命名新文件,实际上是一种很好的做法。这样,如果在写入文件时发生任何事情(例如磁盘已填满,或者用户杀死了您的进程),则原始文件不会受到影响。