2012-12-02 49 views
3

改變了我在Visual Studio中的初學者,我負責的app.config文件。 我只想問你一點小技巧:什麼是使用Windows窗體在app.config文件中多次更新值鍵的最佳方法。到目前爲止,我已經試過這樣:只是,在Form1關閉之前VB 2010的app.config文件和配置文件已被另一個程序

,我更新下一個代碼值:

Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.StartupPath & "\MyProyect.exe") 
Dim aps As AppSettingsSection = config.AppSettings 
aps.Settings.Item("SomeKey").Value = 5 'just an example 
config.Save(ConfigurationSaveMode.Modified) 

那麼接下來的形式是與開放:

Form1.Hide() 
Form2.Show() 

但是當我嘗試再次保存在新的窗體2相同的密鑰值時,它拋出我一個程序凍結的錯誤:

配置文件已經被改變諾特爾程序(C:\用戶\ RH \文檔\ Visual Studio 2010的\項目\ MyProyect \ MyProyect \ BIN \調試\ MyProyect.exe.config)

真的,我尋找解決的辦法,但似乎我是唯一有這種問題的人。就像我會說我只是一個初學者。你能給我一個建議嗎?

回答

1

我覺得你的問題是這樣的,如果你檢查documentationconfig.Save方法,有這種說法,

如果配置文件已經改變,因爲這個配置對象 創建,運行時發生錯誤。

Save更改文件,所以這使我相信,你只能按照Configuration對象的實例調用一次保存方法。所以,這使我相信,這,

Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.StartupPath & "\MyProyect.exe") 
Dim aps As AppSettingsSection = config.AppSettings 
aps.Settings.Item("SomeKey").Value = 5 'just an example 
config.Save(ConfigurationSaveMode.Modified) 
aps.Settings.Item("SomeKey").Value = 15 'just an example 
config.Save(ConfigurationSaveMode.Modified) 

將無法​​在第二保存,但隨後這個,

Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.StartupPath & "\MyProyect.exe") 
Dim aps As AppSettingsSection = config.AppSettings 
aps.Settings.Item("SomeKey").Value = 5 'just an example 
config.Save(ConfigurationSaveMode.Modified) 
'reopen 
config = ConfigurationManager.OpenExeConfiguration(Application.StartupPath & "\MyProyect.exe") 
aps = config.AppSettings 
aps.Settings.Item("SomeKey").Value = 15 'just an example 
config.Save(ConfigurationSaveMode.Modified) 

會成功。

1

你是想節省一些用戶配置的價值?在這種情況下,最好的情況是使用Settings文件,該文件與app.config文件類似,但在應用程序運行期間可更新。實際上,將放置在* .settings文件中的值插入到app.config文件中,但讀取和更新的過程由應用程序管理。

我有一個應用程序,允許用戶從文件夾中讀取文件,我保存在設置文件中的最後一個文件夾的位置。下次運行應用程序時,我可以再次爲該特定用戶讀取該值。

這是在C#中的一些示例代碼:

//read the property on load  
if (Properties.Settings.Default["FileLocation"] != null 
    && !string.IsNullOrWhiteSpace(Properties.Settings.Default["FileLocation"].ToString())) 
{ 
    DirectoryInfo dirInfo 
     = new DirectoryInfo(Properties.Settings.Default["FileLocation"].ToString()); 

    if (dirInfo.Exists) 
     dlg.InitialDirectory = dirInfo.FullName; 
} 

//code removed for clarity 
//.... 

//save on exit from method 
FileInfo fi = new FileInfo(dlg.FileName); 
Properties.Settings.Default["FileLocation"] = fi.DirectoryName; 
Properties.Settings.Default.Save(); 

我把它翻譯成VB.Net,但我提前道歉,因爲我還沒有在一段時間做VB.Net,所以你可能要理智檢查它。 :-D

'read the property on load  
If (Properties.Settings.Default["FileLocation"] IsNot Nothing _ 
    AndAlso Not string.IsNullOrWhiteSpace(Properties.Settings.Default["FileLocation"].ToString())) Then 
    Dim dirInfo as DirectoryInfo _ 
     = new DirectoryInfo(Properties.Settings.Default["FileLocation"].ToString()) 

    if (dirInfo.Exists) Then 
     dlg.InitialDirectory = dirInfo.FullName 
    End If 
End If 

'code removed for clarity 
'.... 

'save on exit from method 
Dim fi as FileInfo = new FileInfo(dlg.FileName) 
Properties.Settings.Default["FileLocation"] = fi.DirectoryName 
Properties.Settings.Default.Save() 
相關問題