1

我正在读取 XML 文件的内容并将其解析为对象模型。

当我修改对象模型中的值时,然后使用以下代码将其保存回 xml:

XElement optionXml = _panelElement.Elements("options").FirstOrDefault();

optionXml.SetAttributeValue("arming", value.ToString());

_document.Save(_fileName);

据我所知,这很有效,因为当我关闭应用程序并重新启动它时,我保存的值会在我下次查看它时反映在对象模型中。

但是,当我加载实际的 XML 文件时,这些值仍然是原来的样子。

为什么是这样?我需要做什么来保存具有新值的实际 XML 文件?

4

3 回答 3

2

您很可能正在体验Windows Vista 中引入的文件系统虚拟化。

基本上,这意味着您正在保存文件,而不是您认为要保存它的位置。例如,您可能认为您正在保存到C:\Program Files\Your App\yourFile.xml.,但幕后发生的事情是操作系统正在默默地将其重定向到%APPDATA%\Your App\yourFile.xml. 当您重新加载它时,操作系统会再次从该位置静默重定向。

这是一种安全措施,旨在更好地封装应用程序及其数据,并防止对可能发生损坏的位置进行未经授权的写入。您仍然可以强制保存到%PROGRAMFILES%\Your App,但要做到这一点,您需要放宽应用于该文件夹的 ACL,或者您需要提升应用程序运行的权限级别。

于 2012-04-11T11:52:51.220 回答
1

我不确定是将其作为评论还是作为答案,但我认为这可能是一个潜在的答案。听起来 XML 文件正在被保存,因为数据在应用程序的实例中被持久化。它可能是像 slugster 提到的文件系统虚拟化,但它可能很简单,因为您正在查看 XML 文件的错误副本。如果您使用的是相对路径,则该文件可能已复制到新位置。我建议您对该文件名进行快速文件搜索,看看您会得到什么。

于 2012-04-11T11:57:10.500 回答
0

事实证明,该文件被复制到输出目录并从中读取。我可以看到它正在按预期从那里更新。

于 2012-04-11T12:50:02.690 回答