2013-07-23 174 views
0

我正在處理個人C#項目,我想使用嵌套字典處理存儲我的settings.ini文件值以供將來讀/寫到我的settings.ini文件。我的Settings.ini文件包括:訪問和設置嵌套字典值

[Application] 
AutoShowSetting=Log 
SettingsIniDirectory=Application 
LogDirectory=Application 

...

我使用的是兩個用於每個循環從文件的Settings.ini讀取的信息,像這樣:

public void storeIniValues() 
{ 


    int i = 0; 
    string[] sectionNames = iniFile.GetSectionNames(); 

    foreach (string section in sectionNames) 
    { 
     string[] keys = iniFile.GetKeyNames(section); 
     foreach (string key in keys) 
     {     
      string keyValue = iniFile.GetString(section, key, ""); 
      i++; 

     }   

    } 
} 

foreach抓取值並將值放入其受尊重的字符串變量中。我希望在循環遍歷foreach循環時將值放入字典中,以便稍後讀取/寫入/更新settings.ini文件。到目前爲止,我創建了一個詞典:

static Dictionary<string, Dictionary<string, string>> iniSettings = 
    new Dictionary<string, Dictionary<string, string>>(); 

如何訪問INI值從嵌套的字典中,像這樣
iniSettings [「應用」] [「AutoShowSetting」],以獲取相應的值(在這種情況下「登錄「)?另外,如何在foreach循環正在循環時向嵌套字典添加值(settingsIni [section] [key] = keyValue)? 我不知道從哪裏開始嘗試這個,因爲我從來沒有使用嵌套的字典。

編輯
我忘了提及的Settings.ini文件將保存值來填充複選框,文本框等..

+2

或者你可以使用完全正常的app.config結構已經存在爲C#應用程序? =) –

+0

但是現在你已經在這裏了,你在最後一段提出的解決方案有什麼問題?當你嘗試時你有任何錯誤嗎? –

+1

或者使用下面討論的INI包裝類之一:http://stackoverflow.com/questions/217902/reading-writing-an-ini-file – Corak

回答

1

假設你要繼續沿着這條道路,而不是使用ConfigurationManager中已經內置到.NET中,或已經在註釋中提到的現有ini-file包裝器,您需要執行此操作以將值添加到您的內存結構中:

當您有一個部分時,您需要添加它。

iniSettings.Add(section, new Dictionary<string, string>()); 

當你有一個部分(添加後),一個鍵和一個值,你需要添加它。

iniSettings[section].Add(key, value); 

這將導致通過調用

bool sectionExists = iniSettings.ContainsKey(section); 

將返回一個類似於

+ section1 
    + key1, value 
    + key2, value 
+ section2 
    + key1, value 

等,您可以檢查是否有部分在你的內存結構中存在的結構布爾。這同樣適用於鍵,當然:

bool keyExists = iniSettings[section].ContainsKey(key); 

要訪問它們,你只需使用你已經想到了:

var value = iniSettings[section][key]; 
+1

請原諒第一段的評論,我只是想說清楚,還有其他選擇。 =) –

+0

我很好奇,如果我能夠深入一個字典。例如:'static Dictionary ,string >> iniSettings = 新詞典<字符串,字典<詞典<字符串,字符串>,字符串>>(); iniSettings.Add(section,new Dictionary ,string>());' 如果可以的話,我該如何添加到嵌套字典? – dottedquad

+0

您可以儘可能深入地完成任務,只需按照上面的代碼示例中的說明初始化每個子部分即可。然而,如果你想要無限的深度,你可能需要考慮爲這個類創建一個專門的結構。我相信你會弄明白的。 =) –