카테고리 없음

[Win32API] ini 파일 읽고 쓰기

쪽제비 2016. 8. 1. 10:14

사용 계기 

 - Login 시 서버에 접속 전에 PC에서 사용자 인증을 1차적으로 거치기 위해서 ini파일에 ID, Password를 저장 후 인증하도록 함.

  - 개인 PC의 보안 접속을 위해 PC에서 미리 인증된 ID로만 접속 하도록 하기 위함.

 


1.ini 파일

우선 ini 파일이 무엇인지 알아야 한다.


- 정의

INI(Initialization) 파일 포맷은 설정 파일에 대한 de facto 표준이다. INI 파일은 단순 구조의 텍스트 파일로 이루어져 있다. 보통 마이크로소프트 윈도와 연결되어 있지만 다른 운영 체제에서도 사용할 수 있다. "INI 파일"이라는 이름은 ".INI"라는 파일 확장자가 따라오지만, ".CFG", ".conf", ".TXT" 등의 다른 확장자를 사용하기도 한다.


- 형식

매개 변수

INI 파일에 포함된 기본 요소는 매개 변수이다. 각 변수는 이름과 값을 가지고 있으며 등호로 이를 구분한다. "이름"은 등호 왼쪽에 적는다.

이름(키) =

섹션

매개 변수는 임의의 이름으로 지정된 여러 개의 섹션으로 구분할 수 있다. 이 섹션 이름은 괄호 ([, ])로 구분한다.

[섹션]
주석

세미콜론 (;)은 주석의 시작을 가리킨다. 줄이 끝날 때까지 주석을 계속 적을 수 있다. 세미콜론 사이의 모든 항목과 줄의 끝 부분까지의 내용은 프로그램의 설정값에서 무시한다.

; 주석


가상의 프로그램(실제로 존재하지는 않음)을 위한 INI 파일의 예는 다음과 같다. 두 개의 섹션을 가지고 있으며, 그 가운데 한 섹션은 소프트웨어의 소유자에 대한 것이며, 나머지 하나는 종업원 명부 데이터베이스 연결에 대한 것이다. 또, 파일을 마지막으로 수정한 날짜,도메인 이름 대신 IP 주소가 쓰인 까닭에 대해 주석을 적고 있다.

; 홍길동이 2001년 4월 1일에 마지막으로 수정하였음
[owner]
name=홍길동
organization=최고의 제품

[database]
server=192.0.2.62     ; 네트워크 이름 변환이 동작하지 않는 경우 IP 주소를 사용한다
port=143
file="payroll.dat"


출처 위키백과 : https://ko.wikipedia.org/wiki/INI_%ED%8C%8C%EC%9D%BC





1-1. WritePrivateProfileString()

BOOL WINAPI WritePrivateProfileString(

  __in  LPCTSTR lpAppName,

  __in  LPCTSTR lpKeyName,

  __in  LPCTSTR lpString,

  __in  LPCTSTR lpFileName

);


ini파일에 data를 쓰기 위한 함수


[Parameter]

lpAppName [in]

어떤 섹션에 기록될것인지 입력합니다.

lpKeyName [in]

어떤 키에 기록될것인지 입력합니다. 만약 NULL일때는 섹션 내의 모든 정보를 삭제합니다.

lpString [in]

키에 들어가는 값을 입력합니다. 꼭 NULL종료 문자열이여야 합니다. 정수, 실수등의 값은 문자열로 바꾸어서 넣어주어야 하고, 만약 NULL일때는 키를 삭제합니다.

lpFileName [in]

어떤 파일에 기록할지 입력합니다. 경로를 지정하지 않으면, 윈도우즈 디렉토리 (보통 C:\Windows\)에 생성됨.


2-2.GetPrivateProfileString()

DWORD WINAPI GetPrivateProfileString(

  __in   LPCTSTR lpAppName,

  __in   LPCTSTR lpKeyName,

  __in   LPCTSTR lpDefault,

  __out  LPTSTR lpReturnedString,

  __in   DWORD nSize,

  __in   LPCTSTR lpFileName

);


[Parameter]


lpAppName [in]

어떤 섹션을 읽을지 지정합니다. .

lpKeyName [in]

어떤 키를 읽을지 지정합니다.

lpDefault [in]

읽을수 없을때 어떤 값이 디폴트로 될지 지정합니다.

lpReturnedString [out]

문자열 버퍼의 주소를 줍니다.

nSize [in]

lpReturnedString의 사이즈를 줍니다.

lpFileName [in]

어떤 ini에서 읽을지 지정합니다.




적용


BOOL CALLBACK InfoDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

char str[100] = "test1234";

SYSTEMTIME st;


switch(uMsg){

case WM_INITDIALOG:

WritePrivateProfileString("LOGIN", "ID","test", "c:\\login.ini");

WritePrivateProfileString("LOGIN", "PASSWORD","1234","c:\\login.ini");

return TRUE;

case WM_CLOSE:

EndDialog(hDlg, NULL);

}

return FALSE;

}


- Test 결과 파일이 없는 상태에서도 WritePrivateProfileString() 를 사용하면 파일 생성 및 data 입력이 가능 하다.

- 경로를 적지 않을 경우 "c:\windows" 폴더에 생성됨을 확인.