반응형
.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)
감사합니다.
잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다.
반응형
'Apps. > C & C++' 카테고리의 다른 글
| [C++] IP주소 네트워크 연결 확인 Ping 예제소스 (_popen) (1) | 2023.10.06 |
|---|---|
| [C++/Console] 콘솔창 마우스 드래그 방지 (마우스/키보드 입력 비활성화) (0) | 2022.03.12 |
| [C++/Win32] 프로그램 중복 실행 확인하기(FindWindow) (0) | 2022.03.09 |