[WinAPI] GetPrivateProfileString, WritePrivateProfileString

윈도우 프로그램에서 설정값을 저장하기 위한 방법으로 많이 쓰였던 방법 중에 INI파일에 설정 값을 저장하는 방법이 있습니다.

요새는 자주 사용하지 않는다고 하는데, 오래된 회사거나 하나의 솔루션을 오래 사용하고 있는 회사에서는 아직도 많이 쓰이는 방법입니다.

우선 코딩을 하기전에 메모장을 실행하여 아래와 같이 입력합니다.

[SECTION]
KEY1 = 1234
KEY2 = Key_02

이렇게 만들어준 메모장을 Set.ini, 유니코드로 우선 바탕화면에 저장합니다.

그리고 프로젝트 하나 생성 해주시고 Edit Box 1개와, Button 2개를 만들어 줍니다.

대화상자 헤더파일에 Edit Box의 멤버 변수를 아래와 같이 선언 합니다.

CEdit m_edWrite;

그리고 Write 버튼 이벤트 처리 함수에 아래와 같이 입력합니다.

void CMFCApplication1Dlg::OnBnClickedButtonWrite()
{
	CString sWrite;
	m_edWrite.GetWindowText(sWrite);

	if ( _T("") != sWrite )
	{
		BOOL bWrite = WritePrivateProfileString(
			_T("SECTION"),		// SECTION 명칭
			_T("KEY1"),			// KEY 명칭
			sWrite,				// 입력할 String
			_T(".\\Set.ini")	// 설정 파일 위치
		);
		if ( bWrite )
			AfxMessageBox( _T( "입력 되었습니다." ) );
		else
			AfxMessageBox( _T( "입력 실패." ) );
	}
	else
	{
		AfxMessageBox( _T("입력이 비어있습니다.") );
	}
}

Read 버튼 이벤트처리 함수에 아래와 같이 입력합니다.

void CMFCApplication1Dlg::OnBnClickedButtonRead()
{
	TCHAR atcRead[MAX_PATH];
	DWORD dwReadSize = GetPrivateProfileString(
		_T("SECTION"),	// SECTION 명칭
		_T("KEY1"),		// KEY 명칭
		_T(""),			// 실패할 경우 읽을 문자열
		atcRead,		// 읽을 변수
		sizeof(atcRead),	// 크기
		_T(".\\Set.ini")	// 설정 파일 위치
	);

	if ( 0 < dwReadSize )
		AfxMessageBox( atcRead );
	else
		AfxMessageBox( _T("읽기 실패") );
}

그리고 빌드 하시고, 아까 만들었던 ini 파일을 프로그램과 같은 위치에 넣어 줍니다.

실행해서 확인해 봅니다.

만약에 정상적으로 작동이 안되면 확인 해야할게 있습니다.

  1. 파일 위치, Section, Key 명칭 제대로 입력 했는지 확인해보고
  2. INI 파일 저장 시 파일 형식이 잘못된건 아닌건지 확인하시고
  3. 디버깅 모드로 실행 한 경우 “프로젝트 속성 -> 디버깅“에서 “작업 디렉터리“가 $(OutDir)로 설정되어 있는지 확인합니다.

보통 세가지 경우로 다 해결됩니다.