프로그램을 개발하다 보면 사용자 환경을 저장하는 설정 파일을 읽거나 쓰는 경우가 발생한다. 그중 많이 사용되는 방법 중 하나가 .ini 파일을 사용하는 방법이며, .ini 파일은 일정한 문법적인 구조에 따라 작성된다. 물론, 아직도 레지스트리에 프로그램의 설정을 저장하는 경우도 많이 사용되지만, Window 운영체제의 보안 강화로 인해 레지스트리의 접근은 더 이상 자유롭지 못하다. 이러한 이유로 본인은 .ini 파일을 선호한다.

 

 

1. kernel32 사용하는 방법

C# 언어로 프로그램을 개발하는데 있어서, WIN API를 사용하는 것은 반갑지 않다. 하지만 무작정 피해 갈 수도 없는 노릇이다. 본인은 가급적 피해 갈 수 있는 방향으로 개발을 하지만 어쩔 수 없는 경우도 존재한다. 먼저 kernel32.DLL을 사용해서 .ini 파일을 읽고 쓰는 방법을 소개한다.

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
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            // ini 쓰기
            WritePrivateProfileString("WookoaSetting""TopAlways""true""C:\\Setting.ini");
            WritePrivateProfileString("WookoaSetting""ViewTray""false""C:\\Setting.ini");
 
            // ini 읽기
            StringBuilder topAlways = new StringBuilder();
            StringBuilder ViewTray = new StringBuilder();
 
            GetPrivateProfileString("WookoaSetting""TopAlways""", topAlways, topAlways.Capacity, "C:\\Setting.ini");
            GetPrivateProfileString("WookoaSetting""ViewTray""", ViewTray, ViewTray.Capacity, "C:\\Setting.ini");
        }
 
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
    }
}
cs

 

위와 같이 코드는 간단하다. kernel32.dll 파일을 Import 해준 뒤, 선언한 메서드를 활용해서 읽고 쓰면 된다. 지정한 경로에 생성된 Setting.ini 파일을 열어보면 아래와 같이 생성되었다.

 

지정된 경로에 생성된 Setting.ini 파일

 

 

 

 

 

2. Kernel32 사용하지 않는 방법

WIN API를 사용하지 않는 방법은 의외로 단순하고 직관적이다. 파일을 StreamReader 객체로 읽어 들여서 파싱 하면 끝이다. 하지만 이런 파싱을 직접 할 필요도 없다. 이미 오픈소스에 괜찮은 소스가 많이 올라왔다. 그중 하나의 소스를 소개한다.

 

URL: https://github.com/Enichan/Ini

Ini.cs
0.03MB

 

Github 경로에서 다운로드 받아도 되며 본인이 소개한 시점의 버전을 그대로 첨부했다. 다운로드한 Ini.cs 소스를 자신의 프로젝트에 아래와 같이 추가한다.

 

 

추가한 Ini.cs 파일을 아래와 같이 오브젝트 선언 후, 제공되는 메서드를 통해 손쉽게 설정 값을 바로 사용할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            // ini 쓰기
            IniFile ini = new IniFile();
            ini["WookoaSetting"]["TopAlways"= "true";
            ini["WookoaSetting"]["ViewTray"= "false";
            ini.Save("C:\\Setting.ini");
 
            // ini 읽기
            ini.Load("C:\\Setting.ini");
            string topAlways = ini["WookoaSetting"]["TopAlways"].ToString();
            string ViewTray = ini["WookoaSetting"]["ViewTray"].ToString();
        }
    }
}
cs

 

Github에 공유된 가볍고 좋은 소스를 통해 매우 간결하고 직관적으로 코딩할 수 있다. 지정한 경로에 생성된 Setting.ini 파일을 열어보면 동일한 결과물을 얻을 수 있으며, 읽어진 변수 값을 메시지 박스로 확인해보면 정상적으로 값이 읽어지는 것을 확인할 수 있다.

 

 

 
 
Private comment