XmlDocument 保存文件不完整
XmlDocument saving the file incompletely
我有一个简单的代码可以修改现有的 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) 上编写的。
好的,所以我发现这就是我的 XML 文件在应用程序仍在使用时的显示方式。即使我将文件复制到我的 PC 并使用 Notepad++ 查看它,它似乎仍然损坏。但是该应用程序按预期使用它,没有任何问题(这显然是之前破坏它的另一个问题)。如果你问我,这是一种奇怪的行为。但我不会再深入挖掘了。
无论如何,在评论中,dbc 指出了一个关于覆盖文件的简单但很酷的提示,我认为这对于防止任何应用程序中潜在的文件损坏问题至关重要。在我余下的编码生活中,我将以此作为经验法则:
Writing to a new file, then deleting the old and renaming the new, is actually good practice. That way, if anything happens while writing the file (e.g. the disk fills up, or the user kills your process) then the original file is untouched.
我有一个简单的代码可以修改现有的 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) 上编写的。
好的,所以我发现这就是我的 XML 文件在应用程序仍在使用时的显示方式。即使我将文件复制到我的 PC 并使用 Notepad++ 查看它,它似乎仍然损坏。但是该应用程序按预期使用它,没有任何问题(这显然是之前破坏它的另一个问题)。如果你问我,这是一种奇怪的行为。但我不会再深入挖掘了。
无论如何,在评论中,dbc 指出了一个关于覆盖文件的简单但很酷的提示,我认为这对于防止任何应用程序中潜在的文件损坏问题至关重要。在我余下的编码生活中,我将以此作为经验法则:
Writing to a new file, then deleting the old and renaming the new, is actually good practice. That way, if anything happens while writing the file (e.g. the disk fills up, or the user kills your process) then the original file is untouched.