본문 바로가기
프로그래밍/C#, WPF, .Net

[C#, WPF] INI 파일 쓰기, 읽는 방법

by GhostWeb 2021. 3. 6.
반응형

 

이번에는 C#에서 INI 파일을 쓰고, 읽어오는 방법에 대해서 알아보도록 할게요.

 

* 코드

using System.Runtime.InteropServices;

// INI 관련
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);


private void iniFile_Click(object sender, RoutedEventArgs e)
{
	// 현재 프로그램 실행 위치
	string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
	path =  System.IO.Path.GetDirectoryName(path) + "\\test.ini";

	// 쓰기 - long WritePrivateProfileString(string section, string key, string val, string filePath);
	long writeResult = WritePrivateProfileString("SECTION", "KEY1", "VALUE-1", path);
	Debug.WriteLine("Write result : {0}", writeResult);

	// 읽기 - int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
	StringBuilder retVal1 = new StringBuilder();
	StringBuilder retVal2 = new StringBuilder();
	StringBuilder retVal3 = new StringBuilder();

	int result1 = GetPrivateProfileString("SECTION", "KEY1", "def", retVal1, 32, path); // key 있음
	int result2 = GetPrivateProfileString("SECTION", "KEY2", "def", retVal2, 32, path); // key 없음
	int result3 = GetPrivateProfileString("SECTION", "KEY2", "def", retVal3, 32, "C:\none.ini"); // ini 파일 없음

	Debug.WriteLine("있음 : {0} / {1}", result1, retVal1.ToString());
	Debug.WriteLine("없음 : {0} / {1}", result2, retVal2.ToString());
	Debug.WriteLine("INI 파일 없음 : {0} / {1}", result3, retVal3.ToString());
}

 

* 실행 결과

Write result : 72902018968059905
있음 : 7 / VALUE-1
없음 : 3 / def
INI 파일 없음 : 3 / def

 

* INI 파일 내용

[SECTION]
KEY1=VALUE-1

 

* INI 파일 쓰기

WritePrivateProfileString("SECTION", "KEY", "VALUE", path);

- SECTION : 큰 카테고리

- KEY : KEY 값 (이름)

- VALUE : KEY에 대한 값

- PATH : 저장될 INI 파일의 전체 경로 (경로 + 파일명.ini)

 

해당 SECTION , KEY이 이미 있는 INI 파일에서 Write 할 경우 그 위에다 Value를 덮어씁니다.

 

 * INI 파일 읽기

StringBuilder retVal = new StringBuilder();

GetPrivateProfileString("SECTION", "KEY", "def", retVal, 32, path);

- SECTION : 큰 카테고리

- KEY : 가져올 KEY 값

- def : 해당 KEY의 Value를 가져오지 못할 경우에 대한 기본 값

- retVale : 해당 KEY의 값 (StringBuilder로 .ToString()로 string으로 변환하여 사용 가능) 

 

GetPrivateProfileString() 리턴 값이 int인데 테스트 결과 Key의 값을 제대로 읽어오면 7, 파일이 없거나 Key가 없으면 3을 리턴하는데 정확한 리턴 값에 대한 내용은 좀 더 알아봐야 겠네요.

 

반응형