수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1621021
  • Today | 401
  • Yesterday | 482

2 Articles, Search for 'INI 파일'

  1. 2007/05/15 응용 프로그램의 INI 파일 바꾸기
  2. 2007/05/15 INI 파일 읽고 쓰기 (2)
Programming/MFC2007/05/15 09:29

응용 프로그램의 INI 파일 바꾸기

Nov 20 2002 10:21 Written by www.anygate.com


1. 응용 프로그램의 INI 파일 : 표준 INI (standard INI)

Win 95' 이래 INI 파일의 사용은 윈도우즈 레지스트리로 대체되었지만
탐색기로 윈도우즈 디렉토리를 열어보면 *.ini 파일을 많이 볼 수 있는데
그것은 아직도 INI 파일이 사용되고 있다는 얘기다.
윈도우즈 디렉토리에 있는 INI 파일들의 이름은 대개 응용 프로그램의 이름과 같다.
예를들어 넷스케이프를 사용하고 있다면 그곳에서 netscape.ini 파일을 볼 수 있을 것이다.

응용 프로그램의 INI 파일은 보통 윈도우즈 디렉토리에 만들어지며
그 응용 프로그램의 실행에 관련된 정보를 기록하여 두었다가 실행시에 사용하게 된다.
간단한 예를 든다면 툴바의 위치나 응용 프로그램이 최근에 실행될 때의
창의 크기나 상태 그리고 최근에 열었던 파일의 목록등을 기록하는 것이다.

MFC를 사용하여 만든 응용 프로그램에서는 CWinApp 클래스가
응용 프로그램의 INI 파일을 관리하는 몇 개의 멤버함수들을 제공해 주는데
특별한 지시가 없는 한 응용 프로그램의 INI 파일을 대상으로 정보를 기록하거나 읽어오게 되며
응용 프로그램이 처음 실행될 때 윈도우즈 디렉토리에 만들어지게 된다.


2. 읽고 쓰는 함수들

앞서 말했듯이 MFC의 CWinApp 클래스엔 다음과 같은 멤버함수들이 있다.



사용법은 간단하다. 모두 3개씩의 인자를 가지고 있는데
처음 두개중 lpszSection은 섹션명을, lpszEntry는 해당 섹션의 키를 지정한다.
세번째 인자는 읽는 함수들의 경우 INI 파일이 없거나 있더라도
지정된 섹션이나 키가 없을경우 기록된 값 대신 사용할 디폴트 값이며
쓰는 함수들의 경우엔 해당 키에 기록할 값을 넣어주면 된다.
함수들의 리턴값은 쓰는 함수들의 경우 쓰기가 성공하면 '0'이 아닌 값,
실패하면 '0'이 되고 읽는 함수들의 경우 읽어낸 또는
디폴트로 지정한(읽기를 실패한 경우) 정수 또는 문자열이다.

※ 참고:
값을 기록하기 위해 지정한 섹션이나 키가 존재하지 않는다면 새로 만들어진다.
만약 이미 만들어진 섹션이나 키를 지우려면 WriteProfileString() 함수의
세번째 인자로 NULL을 지정하면 된다. 그리고 섹션이나 키 네임은 대소문자를 구분하지 않는다.


3. 지정된 INI 파일 바꾸기

CWinApp 클래스의 데이터 멤버 중엔 m_pszProfileName이 있는데
바로 이 변수에 응용 프로그램이 사용할 INI 파일명이 담겨 있다.



만약 응용 프로그램이 사용할 INI 파일의 경로나 이름을 바꾸고 싶다면
이 변수에 원하는 경로와 파일명을 넣어주면 되는데 그 전에 해야할 일이 있다.

m_pszProfileName은 위에 보인대로 char형 포인터 변수이다.
응용 프로그램이 시작되고 CWinApp 가 생성되면 이 변수가 가리키는 문자열을 저장할 메모리는
힙 상에 동적으로 할당된다. 따라서 새로 문자열을 지정하려면 먼저 이전에 할당된 메모리를 해제하고
다시 메모리를 할당해야 한다.
다음이 그 과정이다.



첫번째 메모리 할당은 CWinApp 클래스의 InitInstance()가 실행되기 전에 이루어지므로
다시 지정하기 위한 위의 두 줄은 InitInstance() 멤버에 넣어주면 될 것이다.
이 때 주의할 점은 만약 InitInstance()에 응용 프로그램의 INI 파일을 사용하는 코드가 있다면
그 코드의 앞에서 재지정이 이루어져야 한다는 것이다.
그렇지 않을 경우엔 당연히 INI 파일에서 쓰거나 읽은 데이터가 엉뚱한 것이 될 수도 있다.
예를든다면, InitInstance() 함수엔 응용 프로그램이 최근에 열었던 파일목록을 읽어오기 위해
CWinApp 클래스의 LoadStdProfileSettings() 멤버를 둘 수 있는데
이 함수가 호출된 뒤에 응용 프로그램의 INI 파일을 바꾸어버리면
응용 프로그램을 종료할 때 다시 기록되는 최근 파일목록은 어떻게 변경되든 상관없이
다시 프로그램이 실행될 때 읽혀지지 않을 것이다.
"MFC" 카테고리의 다른 글
  • CFile 클래스를 이용한 파일 I/O (0)2007/05/15
  • WaitForSingleObject() 에 의한 Thread 동기화 (0)2007/05/15
  • 응용 프로그램의 INI 파일 바꾸기 (0)2007/05/15
  • Thread (쓰레드) 란 ? (3)2007/05/15
  • Using User-Interface Threads (0)2007/04/29
2007/05/15 09:29 2007/05/15 09:29
Posted by webdizen
Tags INI, INI 파일
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2953

Leave your greetings.

[로그인][오픈아이디란?]

Programming/Win32 API2007/05/15 09:26

INI 파일 읽고 쓰기

Nov 20 2002 10:11 Written by www.anygate.com


1. INI 파일이란...

간단히 말하면 응용 프로그램이 실행될 때 필요한 초기화 정보를
담고있는 파일 (INItialization file) 이다.
16 bit 윈도우즈 응용 프로그램들은 대부분 실행파일명과 동일한 이름을 가진
INI 파일을 가지고 있으며 윈도우즈 자신도 win.ini 라는 초기화 파일을 가지고 있다.
아스키 파일이므로 일반 텍스트 편집기로 쉽게 내용을 확인할 수 있고
그 속에 담긴 정보의 의미를 정확히 이해할 수 있는 경우라면 간단히 수정할 수도 있다.
보통 윈도우즈 디렉토리나 응용 프로그램이 설치된 디렉토리에 존재한다.

2. INI 파일에는 무엇을 기록하는가?

꼭 무엇을 기록해야 하는가는 중요치 않다.
프로그래머가 필요하다고 생각되는 정보는 무엇이든 기록할 수 있다.
일반적으로는 최근에 불러왔던 파일들의 목록,
최근에 실행되었을 때의 윈도우 위치와 모양등을 기록하며
그 외에는 프로그램에 따라 달라진다.
예를 들어, 우리가 사용하는 DevStudio는 프로그램 실행시 이전에 종료하기 전
작업상태 그대로를 유지하여 시작할 수 있는 옵션이 있는데 이런 일에도 사용할 수 있는 것이다.

3. INI 파일의 구성

INI 파일은 다음의 세부분으로 구성된다. 섹션 (section), 키 (key), 값 (value)
예를들어 어떤 게임 프로그램에서 상위 10등 이내에 든 사람의 이름을 ini 파일에 기록한다면
이런 식이 될 것이다.


[SCORE] <--- 섹 션: SCORE

1등=밤사람 <--- 키: 1등, 값: 밤사람
2등=홍길동 <--- 키: 2등, 값: 홍길동
3등=나삼등 <--- 키: 3등, 값: 나삼등
......


4. INI 파일에서 정보를 가져오기.

WIN 32 API는 INI 파일에서 정보를 읽어내는 것과 관련 4개의 함수를 제공한다.
아래에 함수들의 원형이 소개되어 있다.



크게 2가지로 분류해 볼 수 있을 것이다.
하나는 데이터 타입으로 구분된다는 점이고 또 하나는 private이냐 아니냐 하는 점이다.
GetProfileString()과 GetProfileInt()는 win.ini 파일에,
GetPrivateProfileString()과 GetPrivateProfileInt()은 프로그래머가 정의한 ini 파일에 정보를 읽고 쓴다.
함수들의 인자를 자세히 살펴보면 바로 파일명을 전달하는 인자가 있고 없는 차이뿐이다.
API 라이브러리나 DevStudio의 온라인 도움말을 참조하면
함수들의 인자에 대한 자세한 설명이 나와있다.
여기서는 앞에서 예로 들었던 게임점수 기록을 가지고 간단히 설명하겠다.



이것은 "c:\game\score.ini" 파일을 열고 "SCORE" 섹션중 "1등" 이라는 키에
기록되어 있는 값을 읽어 strName 이라는 변수에 저장하라는 말이다.
GET 함수들은 읽어낸 값(문자열의 경우 null종료문자를 뺀) 반환한다.
만일 해당 파일이나 섹션, 키가 존재하지 않거나 기록된 값이 없다면
기본값으로 "기록없음"을 사용하라는 뜻이다.
추가로 파일명에 경로가 사용되지 않으면 프로그램은 해당 파일을 윈도우즈 디렉토리에서 찾게 된다.
물론 경로가 쓰인다면 해당 경로에서 파일을 찾게된다.



이것은 읽어내야할 값이 정수라는 차이 밖에 없다.
나머지는 string을 대상으로한 함수와 동일하다.



여기엔 파일명이 없다. 작업 대상이 되는 파일이 무조건 win.ini가 되기 때문이다.
대개는 윈도우즈가 설정한 값들을 이용하기 위해 사용하지만 여러분이 원한다면
개인적인 정보도 win.ini에 두고 사용할 수 있다.


5. INI 파일에 정보를 기록하기.

WIN 32 API는 INI 파일에 정보를 기록하는 것과 관련 2개의 함수를 제공한다.
아래에 함수들의 원형이 소개되어 있다.



읽기함수들과 달리 쓰는 함수엔 정수형을 위한 함수가 없다.
모두 문자로 처리되기 때문이고 어차피 읽기함수가 그것을 문자로 읽을 것인지
아니면 숫자로 읽을 것인지를 처리해 주므로 아무 문제가 없다.



이것은 "c:\game\score.ini" 파일을 열고 "SCORE" 섹션중 "1등" 키에는 "strName" 변수에 저장된 값을,
"1등점수" 키엔 "strScore" 변수에 저장된 값을 기록하라는 뜻이다.
물론 숫자형태의 점수는 문자열로 먼저 변환시켜야 할 것이다.
여기서도 nScore를 strScore로 변형했다.
win.ini를 대상으로한 함수는 설명하지 않아도 되겠죠?


6. 기타

① 정수형이 아닌 수의 처리는 어떻게 할까?
예를들어 float형이라든가 하는...
API가 완벽하다고는 할 수 없지만 대개는 제공하지 않는 함수가 있다면
분명히 다른 방법이 있기 때문이다.
이 경우에도 처음부터 숫자 데이터를 읽지말고 문자열로 읽어낸 후에
원하는 변수형으로 전환시키면 된다.

② 새로운 섹션이나 키를 만들려면...
값을 기록하는 함수들을 그냥 사용하면 된다.
쓰기 함수들은 기록하려는 섹션이나 키가 없다면 새로 만들어서 값을 기록하기 때문이다.

③ 기록했던 섹션을 지우려면...
특별히 섹션을 지우는 함수는 없다.
그러나 방법은 있다.
기록함수에서 키네임을 전달하는 두번째 인자의 값으로 null을 주면 된다. 이렇게...



INI 파일의 모든 섹션을 순서대로 정리하고 싶다면
기록하기 전에 이 방법으로 지우고 나서 기록을 하면 될 것이다.

④ 섹션이나 키를 지정할 때 대소문자를 구분해야 하는가?
섞어써도 상관없다.
즉, 대소문자를 구분하지 않는다.
"Win32 API" 카테고리의 다른 글
  • API를 이용한 파일 I/O 예제. (0)2007/05/15
  • 윈도우즈 셧다운,리부팅,로그오프 관련 API 함수 (2)2007/05/15
  • INI 파일 읽고 쓰기 (2)2007/05/15
  • Message Management (0)2007/04/29
  • API hooking ( Dll 바꿔치우기~) (1)2007/03/23
2007/05/15 09:26 2007/05/15 09:26
Posted by webdizen
Tags INI, INI 파일
No Trackback 2 Comments

Trackback URL : http://www.webdizen.net/blog/trackback/2952

Leave your greetings.

  1. 애착

    ini설정하는 방법을 찾고 있었는데 감사합니다..^^많은 도움이 되었습니다~

    2008/10/20 10:28 [ Permalink : Modify/Delete : Reply ]
    • webdizen

      안녕하세요. 애착님.
      도움이 되셨다니 저도 기분이 좋아지네요.

      2008/11/10 07:17 [ Permalink : Modify/Delete ]
[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 마주앙 로젤
  • 공유 라이브러리
  • 음악 치료
  • 서술 작업
  • 창강관
  • EnumDisplaySettings
  • 내부자 정보
  • 요세미티
  • 화면 캡처
  • 전자제품
  • Optimizer
  • 순환운동
  • Programmer
  • AS400
  • 디바이스
  • Bitmap ImageList
  • TaskBar
  • 데이터 마이닝
  • Foundstone
  • 아이팟

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
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          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.