.ini 파일에서 단어를 읽어(read) 값을 변수에 저장하거나, 변수 값을 .ini 파일에 입력한 단어와 값을 저장(write)할 수 있습니다.
# 개발 환경
운영체제 : Windows 10 Pro 64bit
개발도구 : Visual Studio 2013 Professional
# 사용한 API
#include <winbase.h>
DWORD GetPrivateProfileString( // read
[in] LPCTSTR lpAppName, // section이름 읽기
[in] LPCTSTR lpKeyName, // section이름에서 변수이름 읽기
[in] LPCTSTR lpDefault, // 변수이름이 없는 경우 초기값 설정
[out] LPTSTR lpReturnedString, // 값을 받는 변수
[in] DWORD nSize, // 받는 값의 길이
[in] LPCTSTR lpFileName // 저장할 파일 경로
);
BOOL WritePrivateProfileString( // write
[in] LPCSTR lpAppName, // section이름 읽기
[in] LPCSTR lpKeyName, // section이름에서 변수이름 읽기
[in] LPCSTR lpString, // 읽은 변수이름에 값 쓰기
[in] LPCSTR lpFileName // 저장할 파일 경로
);
DWORD GetModuleFileName( // open
HMODULE hModule, // 현재 모듈(NULL를 한 경우 자기자신의 실행경로 반환함)
LPSTR lpFilename, // 실행경로 받을 변수
DWORD nSize // 실행경로 버퍼 길이
);
# 결과
(왼쪽) GetPrivateProfileString
(오른쪽) WritePrivateProfileString
# 전체 예제 소스
- Main 함수에서 ini2para, para2ini 호출
- ini2para 함수에서 read_iniFile 호출 (.ini 파일 읽기)
- para2ini 함수에서 write_iniFile 호출 (.ini 파일 쓰기)
#include <stdio.h>
#include <atlstr.h>
#include <WinBase.h>
void ini2para(CString);
void para2ini(CString);
int read_iniFile(CString, CString, CString);
void write_iniFile(CString, CString, CString, CString);
int main(void)
{
TCHAR tExePath[256];
GetModuleFileName(NULL, tExePath, sizeof(TCHAR)*256);
CString csExePath(tExePath);
CString iniFilePath = csExePath.Left(csExePath.ReverseFind('\\')) + L"\\test.ini";
ini2para(iniFilePath);
para2ini(iniFilePath);
}
void ini2para(CString iniFilePath)
{
int count = read_iniFile(iniFilePath, L"TEST", L"count");
printf("read count val = %d\n", count);
}
void para2ini(CString iniFilePath)
{
write_iniFile(iniFilePath, L"TEST", L"count", L"999");
}
int read_iniFile(CString iniFilePath, CString section, CString var)
{
TCHAR tReadVal[1024];
GetPrivateProfileString(section, var, NULL, tReadVal, 32, iniFilePath);
return _ttoi(tReadVal);
}
void write_iniFile(CString iniFilePath, CString section, CString var, CString wrtVal)
{
WritePrivateProfileString(section, var, wrtVal, iniFilePath);
}
# 단위 분석
- int main
int main(void)
{
TCHAR tExePath[256];
GetModuleFileName(NULL, tExePath, sizeof(TCHAR)*256);
CString csExePath(tExePath);
CString iniFilePath = csExePath.Left(csExePath.ReverseFind('\\')) + L"\\test.ini";
ini2para(iniFilePath);
para2ini(iniFilePath);
}
- GetModuleFileName 함수는 프로젝트의 실행파일 경로를 반환합니다.
- 실행파일 경로와 .ini 파일명을 조합하여 iniFilePath 변수에 저장합니다.
- .ini 파일의 경로가 저장된 변수(iniFilePath)로 통해 파일에 저장하거나 불러올 수 있습니다.
- ini2para
void ini2para(CString iniFilePath)
{
int count = read_iniFile(iniFilePath, L"TEST", L"count");
printf("read count val = %d\n", count);
}
- 매개변수
- CString iniFilePath = 읽을 파일 경로
- ini2para 함수는 read_iniFile( )을 호출하여 iniFilePath 경로로 파일을 열어 데이터를 불러오는(read) 함수.
- read_iniFile
int read_iniFile(CString iniFilePath, CString section, CString var)
{
TCHAR tReadVal[1024];
GetPrivateProfileString(section, var, NULL, tReadVal, 32, iniFilePath);
return _ttoi(tReadVal);
}
- 매개변수
- CString iniFilePath = 읽을 파일 경로
- CString section = 섹션 이름
- CString var = 섹션에 속한 변수 이름
- GetPrivateProfileString(...)을 호출하여 iniFilePath 경로에 있는 파일을 열어 section 에서
var 변수의 값을 32길이만큼 tReadVal 로 값을 반환.
- para2ini
void para2ini(CString iniFilePath)
{
write_iniFile(iniFilePath, L"TEST", L"count", L"999");
}
- 매개변수
- CString iniFilePath = 읽을 파일 경로
- para2ini 함수는 write_iniFile( )을 호출하여 iniFilePath 경로로 파일을 열어 데이터를 쓰는(write) 함수.
- write_iniFile
void write_iniFile(CString iniFilePath, CString section, CString var, CString wrtVal)
{
WritePrivateProfileString(section, var, wrtVal, iniFilePath);
}
- 매개변수
- CString iniFilePath = 읽을 파일 경로
- CString section = 섹션 이름
- CString var = 섹션에 속한 변수 이름
- CString wrtVal = 섹션의 변수에 저장할 값
- WritePrivateProfileString(...)을 호출하여 iniFilePath 경로에 있는 파일을 열어 section 에서
var 변수에 wrtVal 변수의 값을 쓰는 함수. (var = wrtVal)
감사합니다.
잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다.