2015-02-05 61 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