[MFC] INI 파일 생성 및 읽어오기
- C++/MFC
- 2018. 6. 14. 12:07
[MFC] ini 파일 만들기
이번 포스팅에서는 ini 파일이 무엇이고, 실제 프로젝트에서 ini 파일을 어떻게 생성하고 활용하는지에 대해서 알아보도록 하겠습니다.
먼저 ini 파일이란 간단하게 말하자면 응용 프로그램이 실행 되었을 때, 프로그램이 필요한 초기화 정보를 담고 있는 파일이라고 쉽게 이해를 하시면 되겠습니다.
Ini 파일의 구성은 크게 섹션, 키, 값 세가지로 구성 되어집니다.
[성적] <- 섹션 : 성적
1등 = 원숭이 <- 키 : 1등, 값 : 원숭이
2등 = 호랑이 <- 키 : 2등 값 : 호랑이
저는 주로 실무에서 Database, FTP 의 IP, Port 정보, Password, 파일들이 저장되어 있는 Local 경로등을 기록해서 ini 파일을 사용합니다.
그렇다면 실제로 MFC 프로젝트를 이용하여 실제 ini 파일 작성하는 방법에 대해서 알아보도록 하겠습니다. 우선 대화상자 기반의 MFC 프로젝트를 생성하여 주시기 바랍니다.
이렇게 프로젝트를 생성하였다면 stdafx.h, stdafx.cpp 에 아래와 같은 코드를 작성하여 주시기 바랍니다.
Stdafx.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는 // 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이 // 들어 있는 포함 파일입니다.
#pragma once
#ifndef VC_EXTRALEAN #define VC_EXTRALEAN // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다. #endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 일부 CString 생성자는 명시적으로 선언됩니다.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다. #define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 핵심 및 표준 구성 요소입니다. #include <afxext.h> // MFC 확장입니다.
#include <afxdisp.h> // MFC 자동화 클래스입니다.
void INIWriteString(CString strAppName, CString strKeyName, CString strValue, CString strFilePath); CString INIReadString(CString strAppName, CString strKeyName, CString strFilePath);
CString GetExePath();
#ifndef _AFX_NO_OLE_SUPPORT #include <afxdtctl.h> // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다. #endif #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // Windows 공용 컨트롤에 대한 MFC 지원입니다. #endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // MFC의 리본 및 컨트롤 막대 지원
|
Stdafx.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
// stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다. // test.pch는 미리 컴파일된 헤더가 됩니다. // stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다.
#include "stdafx.h"
CCriticalSection g_criticalExe;
CString INIReadString(CString strAppName, CString strKeyName, CString strFilePath) { char szReturnString[1024] = {0,};
memset (szReturnString, NULL, 1024 );
GetPrivateProfileString(strAppName, strKeyName, "", szReturnString, 1024, strFilePath);
CString str;
str.Format("%s", szReturnString);
return str; }
void INIWriteString( CString strAppName, CString strKeyName, CString strValue, CString strFilePath ) { WritePrivateProfileString( strAppName, strKeyName, strValue, strFilePath );
}
CString GetExePath() { g_criticalExe.Lock();
static TCHAR pBuf[256] = {0, };
memset(pBuf, NULL, sizeof(pBuf));
GetModuleFileName( NULL, pBuf, sizeof( pBuf ) ); //현재 실행 경로를 가져오는 함수
CString strFilePath;
strFilePath.Format( _T( "%s" ), pBuf );
strFilePath = strFilePath.Left( strFilePath.ReverseFind( _T( '\\' ) ) );
g_criticalExe.Unlock();
return strFilePath; } |
여기까지 하셨다면 이제 MainDlg.cpp 안에 있는 OnInitDialog() 함수 안에 아래와 같은 코드를 작성하여 주시고 프로그램을 실행하여 주시기 바랍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
BOOL CtestDlg::OnInitDialog() { CDialogEx::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } }
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는 // 프레임워크가 이 작업을 자동으로 수행합니다. SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다. SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다. CString strFilePath; strFilePath.Format("%s\\Data.ini", GetExePath());
INIWriteString("성적", "1등", "원숭이", strFilePath); INIWriteString("성적", "2등", "호랑이", strFilePath); INIWriteString("성적", "3등", "닭", strFilePath);
CString data = INIReadString("성적", "2등", strFilePath);
CFont fnt; LOGFONT lf; ::ZeroMemory(&lf, sizeof(lf)); lf.lfHeight = 60; fnt.CreateFontIndirect(&lf); GetDlgItem(IDC_STATIC1)->SetFont(&fnt);
SetDlgItemText( IDC_STATIC1, data);
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다. }
|
위의 내용을 간단히 설명을 드리면 INIWritingString(섹션, 키, 값, 해당 INI 파일이 생성되는 경로) 를 나타내면서 위 함수를 이용하여 사용자가 원하는 섹션과 키, 값을 입력할 수 있습니다.
또한, 위의 INI 파일의 값을 읽어와 코드상으로 가져오고 싶다면 INIReadingString(읽을 섹션, 키, 읽을 INI 파일이 위치해 있는 경로)를 이용하여 위와 같이 코드를 작성하여 주시면 됩니다.
결과 화면
위와 같이 INI 파일 생성이 되었고, 제대로 값도 읽어온 것을 확인하실 수 있습니다.
지금까지 간단히 MFC INI 파일 생성하는 방법에 대해서 알아보았습니다.
감사합니다.^^
'C++ > MFC' 카테고리의 다른 글
[MFC] CTime 클래스 간단 사용 방법 (0) | 2018.06.27 |
---|---|
[MFC] Edit Control (에디트 컨트롤) 간단 사용 방법 (0) | 2018.06.25 |
[MFC] 동적배열 CArray 사용 방법 (0) | 2018.06.14 |
[MFC] CString 문자열 추출 하는 방법 (0) | 2018.06.07 |
[C++] CSV 파일을 읽어, MFC 환경에서 ListControl을 이용하여 데이터 보여주는 방법 (0) | 2018.05.30 |
이 글을 공유하기