2015-02-05 66 views
0

在VB.NET项目中,我有一个xml文档作为嵌入式资源。我正在访问它与无法保存到嵌入式xml文档

Private xmlFile as New XmlDocument() 

在总宣言领域。然后我加载它的形式加载方法:

xmlFile.LoadXml(My.Resources.Settings) 

在一个方法我发现特定节点,并根据用户输入更新它们:

'Dim xmlDoc as XmlDocument 
'xmlDoc = xmlFile 

Dim settingNodes As XmlNodeList = xmlFile.SelectNodes("//Program/ProgramTitle") 

For Each setting As XmlNode In settingNodes 
    If setting.InnerText = title Then 
     setting.ParentNode.Item("ProgramSaveFolder").InnerText = programFolder 
     setting.ParentNode.Item("PrimaryBackupFolder").InnerText = primBackup 
     setting.ParentNode.Item("SecondaryBackupFolder").InnerText = secBackup 
    End If 
Next 

' Neither of these work 
xmlFile.Save("Settings.txt") 
'xmlDoc.Save("GameSettings.txt") 

的xmlDoc中的代码是从当我导致相信有一点,它不是保存,因为xmlFile正在使用(我一直在尝试很多不同的东西!)。

但是,正如代码所述,这些工作都没有。这与我所见过的有关如何执行此操作的示例非常相似,但是当我运行该程序时,它根本不会更改文件。

+0

您从一个地方加载并保存到另一个地方 - 为什么? – OneFineDay 2015-02-05 18:56:18

+0

你能解释一下你看到我做错了吗? – marky 2015-02-05 19:01:09

+0

您无法在运行时修改嵌入的资源,故事结束。 – 2015-02-05 19:17:33

回答

0

您无法修改嵌入的资源。您可以将XML文件包含为内容,并将其作为可以使用File.IO名称空间或XMLDocument.Load()加载和更新的普通文件显示在生成文件夹中。

要注意的一个问题是Program Files文件夹中的一个文件被修改将需要用户可能没有的管理员权限。如果是这种情况,最好将文件复制到AppData文件夹中。

+0

谢谢,兰斯。我发现了一个SO问题(http://stackoverflow.com/questions/940025/adding-files-to-a-click-once-deployment),它解释了如何在ClickOnce中包含文件。我将该文件设置为Build Action =“Content”和“Copy if newer”。所以它不再是一个嵌入式资源,但变化仍然没有被保存。 – marky 2015-02-05 20:12:04

+0

我没有使用过ClickOnce,所以我不熟悉安装文件的位置,是需要管理员权限的目录中的'settings.txt'文件吗? – Lance 2015-02-05 20:18:40

+0

作为新的XmlDocument()私有xmlFile在一般的声明区域中,并且当它是嵌入式资源时,我将使用'xmlFile.LoadXml(My.Resources.Settings)',但现在已经改变了。然后在代码中我一直在使用XmlDocument.Load()和.Save() – marky 2015-02-05 20:18:50