프로그램 제작시 어느정도 규모를 가추게 되면 설정해야 할 것들이 많아지게 된다.
그 중에 너무나 자주 건들어야하는 몇가지 옵션들이 존재한다.
가령 DirectX나 OpenGL사용시에 카메라의 위치나 방향 또는 창의 크기가 그것일 수 있고 또는 지금 테스트 중인 맵파일을 변경 한더던지 초당프레임 제한이라던지 등등이 있을 수 있다.
이때 소스를 직접 건들어 수정하게 되면 너무나 복잡한 과정이 기다리고 있다.
그래서 보통 좀 더 중규모 게임 제작에는 스크립트나 XML파일들을 사용하기도 한다.
하지만 아주 작은 규모의 게임이나 또는 소규모 툴 제작에 있어서는 스크립트나 XML파일을 읽고 수정하는데 필요한 라이브러리 조차 붙이는게 귀찮을 수 있는데 그럴때 표준 설정파일(*.ini) 포맷을 쓰면 매우 유용하다.
이 포맷을 읽는데에는 별도의 라이브러리가 필요 없으며 지금 사용하는 C언어 툴이 표준 C++ 라이브러리를 준수하는 툴이라면 충분하다.
텍스트 파일을 만들 수 있는 툴을 열고(NotePade 또는 메모장) 아래의 형식을 지켜 입력 해준다.
[AppName]
KeyName = ReturnValue
그후에 확장자 명을 ini로 변경해준다.
우리가 제작 중인 소스에는 아래의 함수를 사용해준다.
GetPrivateProfileString(AppName,KeyName,Default,ReturnValue,Size,FileName)
AppName : 읽고자하는 INI파일의 AppName을 적는다.(문자열)
KeyName : 읽고자하는 ReturnValue의 KeyName을 적는다.(문자열)
Default : KeyName으로 설정값을 가져오는데 실패하면 기본적으로 설정해주는 Value값을 적는다.(문자열)
ReturnValue : INI에 있는 설정값중 AppName,KeyName에 해당하는 값을 읽어온다.(문자열)
Size : ReturnValue의 길이(크기)값을 적되 길이보다 크게 적어도 상관없다.(숫자)
FileName : INI파일명. 풀경로로 적되 현재폴더에 따라서 읽고 싶다면 "./Option.ini" 이런식을 따른다.
파일명 "Option.ini"
[Camera]
PosX = 0.0
PosY = 0.0
PosZ = -25.0
[FrameCheck]
FrameOnSec = 20
소스부분
//환경설정
GetPrivateProfileString( "Camera", "PosX", NULL, szData, 512, pFileName );
vecPos.x = atof(szData);
GetPrivateProfileString( "Camera", "PosY", NULL, szData, 512, pFileName );
vecPos.y = atof(szData);
GetPrivateProfileString( "Camera", "PosZ", NULL, szData, 512, pFileName );
vecPos.z = atof(szData);
GetPrivateProfileString( "FrameCheck", "FrameOnSec", NULL, szData, 512, pFileName );
CFrameCheck::GetInstance()->SetFrameSec(atoi(szData));
신경 써야 할 것은 읽은 정보자체가 모두 문자열이기 때문에 숫자(정수,부동소숫점) 형태로 다시 바꿔줘야 할 필요도 있다.
출처 : http://neosafe.blog.me/130045067419