반응형
이번에는 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을 리턴하는데 정확한 리턴 값에 대한 내용은 좀 더 알아봐야 겠네요.
반응형
'프로그래밍 > C#, WPF, .Net' 카테고리의 다른 글
[C#, WPF] 버튼 모서리 둥글게 만드는 방법 (원형 버튼) (1) | 2021.04.04 |
---|---|
[C#, WPF] 자기 자신의(실행 중인 프로그램)의 실행 경로 가져오는 방법 (실행 위치) (0) | 2021.03.06 |
[C#] 네트워크 인터페이스 정보 가져오기 (랜 카드, NIC) (0) | 2021.03.01 |
[C#] 소스 코드 실행 시간 측정하는 방법 (0) | 2021.02.28 |
[C#, WPF] 키보드 입력 이벤트 처리하기 (1) | 2020.06.28 |