본문 바로가기
WORK/Sotfware

ini 파일 읽기 쓰기

by KANG Stroy 2008. 6. 13.
728x90
728x90


참고 : http://msdn2.microsoft.com/en-us/library/ms724353.aspx

// ini 파일
[section]
key = string

ex)
[C/C++]
KEYWORD = const,for,if

1. MFC에서 CMapStringToString 클래스를 사용하여 읽어오기

CMapStringToString  m_hashTable;
void ReadPrivateProfile()
{
    char tmpStr[KEY_SIZE], cbExeDir[256];
    GetModuleFileName(NULL, cbExeDir, 256);
    cbExeDir[strlen(cbExeDir) - 3] = '\0'; 
    strcat(cbExeDir, "ini"); 

    if( GetPrivateProfileString("C/C++", "KEYWORD", NULL, tmpStr, KEY_SIZE, cbExeDir ))
        ReadKeywod(tmpStr);
}
void ReadKeywod(char* key)
{
    char* seps = ",";
    char* token = strtok(key, seps);
    while(token != NULL)
    {    
        AddKeyword_HashItem(token);
        token = strtok(NULL, seps); 
    }
}
void AddKeyword_HashItem(char* keyword)

    UINT b = m_hashTable.HashKey((const char*)keyword);
    CString str; 
    str.Format("%d", b); 
    m_hashTable.SetAt(keyword, str);
}

2. CIniFile 클래스를 사용해서 읽어오기 ( 래핑 클래스 )

1. IniFile.cpp

#include "stdafx.h"
#include "IniFile.h"

CIniFile::CIniFile(VOID)
{
    ZeroMemory(mFileName, sizeof(mFileName));
}

CIniFile::~CIniFile(VOID)
{
}

BOOL CIniFile::Open(LPCTSTR fileName)
{
    if (!fileName)
        return FALSE;

    _tcsncpy(mFileName, fileName, MAX_PATH);

    return TRUE;
}

BOOL CIniFile::Close(VOID)
{
    return TRUE;
}

BOOL CIniFile::GetValue(LPCTSTR keyName, LPCTSTR valueName, LPDWORD value)
{
    if (!keyName || !valueName || !value)
        return FALSE;

    *value = GetPrivateProfileInt(keyName, valueName, 0, mFileName);

    return TRUE;
}

BOOL CIniFile::GetValue(LPCTSTR keyName, LPCTSTR valueName, FLOAT *value)
{
    if (!keyName || !valueName || !value)
        return FALSE;

    TCHAR Value[16] = {0,};

    GetPrivateProfileString(keyName, valueName, _T(""), Value, 16, mFileName);

    *value = (FLOAT) _tstof(Value);

    return TRUE;
}

BOOL CIniFile::GetValue(LPCTSTR keyName, LPCTSTR valueName, LPTSTR value, LPDWORD bufferLength)
{
    if (!keyName || !valueName || !value || !bufferLength)
        return FALSE;

    *bufferLength = GetPrivateProfileString(keyName, valueName, _T(""), value, *bufferLength, mFileName);

    return TRUE;
}

BOOL CIniFile::SetValue(LPCTSTR keyName, LPCTSTR valueName, DWORD value)
{
    if (!keyName || !valueName)
        return FALSE;

    TCHAR Value[16]    = {0,};
    _itot(value, Value, 10);

    WritePrivateProfileString(keyName, valueName, Value, mFileName);

    return TRUE;
}

BOOL CIniFile::SetValue(LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value)
{
    if (!keyName || !valueName || !value)
        return FALSE;

    WritePrivateProfileString(keyName, valueName, value, mFileName);

    return TRUE;
}

BOOL CIniFile::SetValue(LPCTSTR keyName, LPCTSTR valueName, FLOAT value)
{
    if (!keyName || !valueName)
        return FALSE;

    TCHAR Value[16]    = {0,};
    _stprintf(Value, _T("%f"), value);

    WritePrivateProfileString(keyName, valueName, Value, mFileName);

    return TRUE;
}

2. InitFile.h

#pragma once

class CIniFile
{
public:
    CIniFile(VOID);
    virtual ~CIniFile(VOID);

private:
    TCHAR    mFileName[MAX_PATH];

public:
    BOOL    Open(LPCTSTR fileName);
    BOOL    Close(VOID);

    BOOL    SetValue(LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value);
    BOOL    SetValue(LPCTSTR keyName, LPCTSTR valueName, DWORD value);
    BOOL    SetValue(LPCTSTR keyName, LPCTSTR valueName, FLOAT value);

    BOOL    GetValue(LPCTSTR keyName, LPCTSTR valueName, LPTSTR value, LPDWORD bufferLength);
    BOOL    GetValue(LPCTSTR keyName, LPCTSTR valueName, LPDWORD value);
    BOOL    GetValue(LPCTSTR keyName, LPCTSTR valueName, FLOAT *value);

 


728x90

댓글