C# 为什么不是';即使程序在下次启动时看到更新的值,是否仍保存XML文件?

C# 为什么不是';即使程序在下次启动时看到更新的值,是否仍保存XML文件?,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我正在读取XML文件的内容并将其解析为对象模型 修改对象模型中的值时,请使用以下代码将其保存回xml: XElement optionXml = _panelElement.Elements("options").FirstOrDefault(); optionXml.SetAttributeValue("arming", value.ToString()); _document.Save(_fileName); 在我看来,这是可行的,因为当我关闭应用程序并重新启动它时,我保存的值会在下次

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

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

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

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

_document.Save(_fileName);
在我看来,这是可行的,因为当我关闭应用程序并重新启动它时,我保存的值会在下次查看它时反映在对象模型中

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


为什么会这样?要用新值保存实际的XML文件,我需要做什么?

您最有可能遇到的是Windows Vista中引入的

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


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

我不确定是将此作为注释还是答案,但我认为这可能是一个潜在的答案。这听起来像是XML文件被保存了,因为数据在应用程序实例之间被持久化了。这可能是像slugster提到的文件系统虚拟化,但可能是一个简单的问题,因为您看到的是错误的XML文件副本。如果使用的是相对路径,则文件可能已复制到新位置。我建议您对该文件名进行快速文件搜索,并查看返回的内容。

结果表明该文件被复制到输出目录并从中读取。我可以看到它正在按预期从那里进行更新。

是否在保存后关闭文件以释放I/O锁?否,但我现在看到的是,似乎没有关闭它的选项。这取决于如何加载文件以进行关闭()。如果您使用文件类读取内容,然后解析或直接加载到XmlDocument中。是否检查了路径以确保保存在打开时的同一位置?是否确定没有处理文件的副本。检查文件路径或在c:\temp.txt上创建测试文件以进行调试。