파일 읽기/쓰기 - ini데이터(텍스트)


* 프로그램 내부 데이터를 파일을 만들어 읽고 쓰는 다른 방법

* INI 파일
- Initialization 파일 포맷은 설정파일에 대한 de facto 표준이다.
- 구조는 단순한 텍스트 아스키 파일
- .CFG, .conf, .TXT 등의 다른 확장자를 사용할 수 있다.
- 섹션(section), 키(key), 값(value) 세부분으로 구성
- [앱이름]     <--- 섹션(대괄호, [player], [boss])
- 키 = 값  <--- 키와 값
- 참고(세미콜론 ; 으로 주석을 달 수 있다.




* INI 파일을 읽고 쓰는데 사용하는 함수들 사용
https://paynter1127.blogspot.com/2019/10/getcurrentdirectory-writeprivateprofile.html




* INI 파일 읽고 쓰기 아이디어

1. 세이브(데이터 쓰기) 아이디어
- ini데이터를 받아둘 구조체를 벡터로 선언

- 선언한 데이터 구조체에 쓰고 싶은 값 추가(push_back());
- GetCurrentDirectory()를 이용하여 경로를 받아 온다
- strcat을 이용하여 경로와 파일명을 하나의 문자열로 합쳐준다.
- WritePrivateProfileString()를 이용하여 ini 파일을 생성한다.

void iniData::saveINI(const char * fileName)
{
char str[256];
char dir[256];
ZeroMemory(str, sizeof(str));
ZeroMemory(dir, sizeof(dir));
sprintf(str, "\\test/%s.ini", fileName);
GetCurrentDirectory(256, dir);
strcat(dir, str);
for (int i = 0; i < _vIniData.size(); i++)
{
WritePrivateProfileString(_vIniData[i].section, _vIniData[i].key, _vIniData[i].value, dir);
}
}




2. 로드(데이터 읽기) 아이디어(문자열 받아 오기)
- 데이터를 받아 올 문자열을 선언하고 NULL로 초기화 해준다.
- GetCurrentDirectory()를 이용하여 경로를 받아 온다
- strcat을 이용하여 경로와 파일명을 하나의 문자열로 합쳐준다.
- GetPrivateProfileString()을 이용하여 INI 파일 내에 있는 값을 읽어와 선언한 문자열에 넣고 리턴해준다.
- 해당 문자열을 수로 바꾸려면 atoi 나 atof 로 형변환 해준다.

char * iniData::loadDataString(const char * fileName, const char * section, const char * key)
{
char str[256];
char dir[256];
ZeroMemory(str, sizeof(str));
ZeroMemory(dir, sizeof(dir));
sprintf(str, "\\test/%s.ini", fileName);
GetCurrentDirectory(256, dir);
strcat(dir, str);
char data[64] = { NULL };
GetPrivateProfileString(section, key, "", data, 64, dir);
return data;
}













댓글