[MFC] INI 파일 생성 및 읽어오기

[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 리본  컨트롤 막대 지원

 

 

 

 

 

 

 

 

 

Colored by Color Scripter

cs

 


 

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, NULL1024 );

 

    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, NULLsizeof(pBuf));

 

    GetModuleFileName( NULL, pBuf, sizeof( pBuf ) ); //현재 실행 경로를 가져오는 함수

 

    CString strFilePath;

 

    strFilePath.Format( _T( "%s" ), pBuf );

 

    strFilePath = strFilePath.Left( strFilePath.ReverseFind( _T( '\\' ) ) );

 

    g_criticalExe.Unlock();

 

    return strFilePath;

}

Colored by Color Scripter

cs

 

여기까지 하셨다면 이제 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 반환합니다.

}

 

Colored by Color Scripter

cs

 

위의 내용을 간단히 설명을 드리면 INIWritingString(섹션, , , 해당 INI 파일이 생성되는 경로) 를 나타내면서 위 함수를 이용하여 사용자가 원하는 섹션과 키, 값을 입력할 수 있습니다.

 

또한, 위의 INI 파일의 값을 읽어와 코드상으로 가져오고 싶다면 INIReadingString(읽을 섹션, , 읽을 INI 파일이 위치해 있는 경로)를 이용하여 위와 같이 코드를 작성하여 주시면 됩니다.


 

결과 화면




위와 같이 INI 파일 생성이 되었고, 제대로 값도 읽어온 것을 확인하실 수 있습니다.

 

지금까지 간단히 MFC INI 파일 생성하는 방법에 대해서 알아보았습니다.


감사합니다.^^


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY