Write 함수에는 3가지가 있다.
WritePrivateProfileSection[A/W]
WritePrivateProfileString[A/W]
WritePrivateProfileStruct[A/W]
BOOL WritePrivateProfileSectionA(
LPCSTR lpAppName, //section 이름
LPCSTR lpString, //value
LPCSTR lpFileName //파일명
);
WritePrivateProfileSection
함수는 section 에 value만 추가하는 방식으로 중복해서 사용할 경우 계속 값이 추가된다. 주의할점은 기존의 key=value 형식의 값이 section에 있었으면 그 값을 모두 지운다.
또한 ini파일 관련 함수는 파일명인자에 반드시 상대경로 .\\
을 앞에 지정해줘야 한다.
BOOL WritePrivateProfileStringA(
LPCSTR lpAppName, //section 이름
LPCSTR lpKeyName, //key 이름
LPCSTR lpString, //value
LPCSTR lpFileName //파일명
);
WritePrivateProfileString
함수는 section 에 key 와 value 를 추가한다.
이 함수는 해당 section에 value only가 있어도 무시하고 key=value 형식을 추가한다.
lpKeyName 인수가 NULL 이면 해당 섹션을 모두 지운다.(섹션자체를 지운다)
WritePrivateProfileStruct
는 구조체를 쓰는 함수인데 잘 쓰지 않아서 설명은 패스.
int main() {
WritePrivateProfileSectionA("section1", "value only", ".\\test.ini");
WritePrivateProfileSectionA("section1", "value only", ".\\test.ini");
for (int i = 0; i < 3; i++) {
char key[64], value[64];
sprintf(key, "%d", i);
sprintf(value, "%d", i*i);
WritePrivateProfileStringA("section2", key,value, ".\\test.ini");
}
}
[section1]
value only
value only
[section2]
0=0
1=1
2=4
읽기 함수는 아래와 같은 종류들이 있다.
GetPrivateProfileInt[A/W]
GetPrivateProfileString[A/W]
GetPrivateProfileStruct[A/W]
UINT GetPrivateProfileIntA(
LPCSTR lpAppName, //section 이름
LPCSTR lpKeyName, //key 이름
INT nDefault, //읽기에 실패 했을 때, 저장할 기본 값
LPCSTR lpFileName //파일명
);
DWORD GetPrivateProfileStringA(
LPCSTR lpAppName, //section 이름
LPCSTR lpKeyName, //key 이름
LPCSTR lpDefault, //읽기에 실패 했을 때, 저장할 기본 값
LPSTR lpReturnedString, //결과 문자열
DWORD nSize, //문자열의 길이
LPCSTR lpFileName //파일명
);
GetPrivateProfileStruct
는 마찬가지로 패스.
값을 읽어오는 위 3가지 함수는 사용함에 어려움이 없다.
GetPrivateProfileSectionNames
는 모든 section을 읽어오는 함수이고,
GetPrivateProfileSection
는 해당 section의 모든 값(키 포함)을 읽어 오는 함수이다.
두 함수 모드 결과 string에는 다수의 값이 들어가는데, 구분자는 \0
을 사용하고 마지막에는 널문자가 2개 들어간다. 아래의 예시 코드를 통해 값을 가져오는걸 볼 수 있다.
UINT value = GetPrivateProfileIntA("section2", "2", 0, ".\\test.ini");
std::cout << value << std::endl;
char buffer[256];
GetPrivateProfileStringA("section2", "3", "unknown", buffer, 256, ".\\test.ini");
std::cout << buffer << std::endl;
GetPrivateProfileSectionNamesA(buffer, 256, ".\\test.ini");
for (char* p = buffer; *p != NULL; p += strlen(p) + 1) {
std::cout << p << std::endl;
}
GetPrivateProfileSectionA("section2", buffer, 256, ".\\test.ini");
for (char* p = buffer; *p != NULL; p += strlen(p)+1) {
std::cout << p << std::endl;
}