본문 바로가기
C & C++/C & C++

ini 파일 저장 및 읽기

by izen8 2011. 12. 14.
반응형

// INI 파일 쓰기

WritePrivateProfileString(_T("SECTION1"), _T("KEY"), _T("TEST"), _T("./test.ini"));


// INI 파일 읽기

TCHAR value[10] = {0,};

DWORD length = 10;

GetPrivateProfileString(_T("SECTION1"), _T("KEY"), _T(""), value, length, _T("./test.ini"));_tprintf(_T("%s\n"), value);

//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

1. INI파일

응용 프로그램이 실행될 때 필요한 초기화 정보를 담고있는 파일(INItialization file).

16bit 윈도우즈 응용 프로그램들은 대부분 실행파일명과 동일한 이름을 가진 INI파일을 가지고 있으며

윈도우자신도 win.ini 라는 초기화 파일을 가지고 있다. 아스키 파일이므로 일반 텍스트 편집기로 쉽게 내용을 확인할 수 있고 그 속에 담긴 정보의 의미를 정확히 이해할 수 있는 경우라면 간단히 수정할 수도 있다. 보통 윈도우 디렉토리나 응용 프로그램이 설치된 디렉토리에 존재한다.

 

2. INI파일에 기록하는것.

필요하다고 생각되는 정보는 무엇이든 기록할 수 있다.

최근에 불러왔던 파일들의 목록, 최근에 실행되었을 때의 윈도우 위치와 모양등을 기록하며 그외에는 프로그램에 따라 달라진다. 예를들어 프로그램 실행시 이전에 종료하기 전 작업상태를 그대로 유지하여 시작할 수 있는 옵션이 있는데 이런 일에도 사용할 수 있다.

 

3. INI 파일 구성

INI 파일은 세부분으로 구성된다. 섹션(section), 키(key), 값(value)

[비밀번호]       //섹션 = 비밀번호

USER=123       //키 = USER, 값 = 123

MASTER=456   //키 = MASATER, 값 = 456

 

4. INI 파일에서 정보 가져오기

WIN32 API는 INI파일에서 정보를 읽어내는 것과 관련 4개의 함수르 ㄹ제공한다.

DWORD GetProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize);

UINT GetProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault);

DWORD GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);

UINT GetPrivateProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName);

크게 2가지로 분류해 볼 수 있다. 하나는 데이터 타입으로 구분된다는것, 다른하나는 private이냐 아니냐 하는 것이다.

GetProfileString()과 GetProfileInt()는 win.ini 파일에,

GetPrivateProfileString()과  GetPrivateProfileInt()은 사용자가 정의한 ini파일에 정보를 읽고쓴다.

 

strName = GetprivateProfileString("비밀번호", "USER", "0", "c:\\passward\\pass.ini");

이것은 "c:\passward\pass.ini"파일을 열고 "비밀번호"섹션중 "USER"라는 키에 기록되어 있는 값을 읽어 strName이라는 변수에 저장하라는 말이다. GET함수들은 읽어낸 값(문자열의 경우 null종료문자를 뺀)반환한다. 해당파일이나 섹션, 키가 존재하지 않거나 기록된 값이 없다면 기본값으로 "0"을 사용하라는 뜻이다.  또, 파일명에 경로가 사용되지 않으면 프로그램은 해당 파일을 윈도우 디렉토리에서 찾게된다.

nName = GetPrivateProfileInt("비밀번호", "USER", 0, "pass.ini");

이것은 읽어내야할 값이 정수라는 차이밖에 없다.

 

5. INI 파일에 정보 기록

WIN32 API는 INI 파일에 정보를 기록하는 것과 관련 2개의 함수를 제공한다.

BOOL WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);

BOOL WriteProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString);

읽기함수와는 달리 쓰는 함수에는 정수형을 위한 함수가 없다. 모두 문자로 처리되기 때문이고 어차피 읽기함수가 그것을 문자로 읽을 것인지 숫자로 읽을 것인지 처리해주기때문에 상관이 없다.

 

WritePrivateProfileString("비밀번호", "USER", strName, "c:\\passward\\pass.ini");

이것은 "c:\passward\pass.ini"파일을 열고 "비밀번호"센션중 "USER"키에 "strName"변수에 저장된값을 기록하라는 뜻이다. 

반응형

댓글