我正在读取XML文件的内容并将其解析为对象模型。
当我修改对象模型中的值时,请使用以下代码将其保存回xml:
XElement optionXml = _panelElement.Elements("options").FirstOrDefault();
optionXml.SetAttributeValue("arming", value.ToString());
_document.Save(_fileName);
据我所见,这是有效的,因为当我关闭应用程序并重新启动它时,我保存的值会在下次查看时反映在对象模型中。
但是,当我加载实际的XML文件时,值仍然是最初的。
这是为什么?使用新值保存实际XML文件需要做什么?
答案 0 :(得分:2)
您最有可能遇到file system virtualisation,这是Windows Vista中引入的。
基本上这意味着你 保存你的文件,而不是你认为你保存它的地方。例如,您可能认为保存到C:\Program Files\Your App\yourFile.xml
,但是幕后发生的事情是操作系统默默地将其重定向到%APPDATA%\Your App\yourFile.xml
。当你重新加载它时,操作系统会再次从该位置静默重定向。
这是一项安全措施,旨在更好地封装应用程序及其数据,并防止未经授权的写入可能发生损坏的位置。您仍然可以强制保存到%PROGRAMFILES%\Your App
,但要做到这一点,您需要放宽应用于该文件夹的ACL,或者您需要提升应用程序运行的权限级别。
答案 1 :(得分:1)
我不确定是将此作为评论还是答案,但我认为这可能是一个潜在的答案。这听起来像是保存XML文件,因为数据是跨应用程序的实例持久化的。它可能是文件系统虚拟化,如提到的slugster,但它可能很简单,因为您正在查看XML文件的错误副本。如果您使用的是相对路径,则该文件可能已被复制到新位置。我建议你快速搜索一下这个文件名,看看你得到了什么。
答案 2 :(得分:0)
事实证明文件正在被复制到输出目录并从中读取。我可以看到它正在按预期更新。