반응형

 

.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)

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형

+ Recent posts