2013-07-23 3 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 파일을 읽고/쓰거나 업데이트 할 수 있습니다. 내가 (이 경우 너무
iniSettings [ "응용 프로그램"] [ "AutoShowSetting은"] 해당 값을 얻는처럼 중첩 된 사전에서 INI 값에 액세스하려면 어떻게

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

"지금까지 나는 사전을 만들어 로그")? 또한 foreach 루프가 반복되는 동안 중첩 된 Dictionary에 값을 추가하려면 어떻게해야합니까 (settingsIni [section] [key] = keyValue)? 중첩 된 사전을 사용한 적이 없기 때문에 어디에서 시도해 볼지 전혀 모르겠습니다.

편집
는 내가 채울 값을 보유 할 settings.ini 파일을 언급하는 것을 잊었다 체크 박스, 텍스트 상자, 등 ...

+2

또는 현재 이미 완벽하게 정상적으로의 app.config 구조를 사용할 수 있습니다

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

그들에 액세스하려면, 당신은 단순히 사용하는 당신은 이미 생각했습니다 무엇 C# 응용 프로그램 용? =) –

+0

하지만 이미 여기에 왔으므로 마지막 단락에서 제안한 솔루션의 문제점은 무엇입니까? 시도 할 때 오류가 있습니까? –

+1

또는 여기에 설명 된 INI 래퍼 클래스 중 하나를 사용하십시오. http://stackoverflow.com/questions/217902/reading-writing-an-ini-file – Corak

답변

1

이 길을 계속보다는의 ConfigurationManager를 사용하고자하는 가정 주석에 이미 언급 된 .NET 또는 기존 ini 파일 래퍼에 내장되어있는 경우 메모리 내 구조에 값을 추가하려면이 작업을 수행해야합니다.

섹션이 있으면 추가해야합니다 그것.

당신은 (그것을 추가 한 후) 섹션을 가지고
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. 같은 물론, 키에 간다 :

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

비판적으로 들리는 첫 단락을 용서해주십시오, 저는 방금 대안이 있음을 분명히하고 싶었습니다. =) –

+0

나는 한 가지 더 깊은 사전을 갈 수 있는지 궁금하다. 'static Dictionary > iniSettings = 새 사전 , 문자열; iniSettings.Add (섹션, 새 사전 , string>()), ' 가능하면 중첩 된 사전에 어떻게 추가합니까? – dottedquad

+0

위 코드 예제에서 보았 듯이 원하는만큼 깊게 이동할 수 있습니다. 각 하위 섹션을 초기화하십시오. 그러나 무제한 깊이를 원할 경우 대신 클래스의 전용 구조를 만드는 것이 좋습니다. 네가 알아낼거야. =) –