为什么我的 XML 文件没有被保存,即使程序在我下次启动它时会看到更新的值

本文关键字:启动 下次 更新 程序 文件 XML 我的 保存 为什么 | 更新日期: 2023-09-27 18:30:39

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

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

XElement optionXml = _panelElement.Elements("options").FirstOrDefault();
optionXml.SetAttributeValue("arming", value.ToString());
_document.Save(_fileName);

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

但是,当我加载实际的 XML 文件时,这些值仍然与原始值相同。

这是为什么呢?我需要做什么才能使用新值保存实际的 XML 文件?

为什么我的 XML 文件没有被保存,即使程序在我下次启动它时会看到更新的值

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

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

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

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

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