프로그래밍/C#

[C#] ini파일 사용법

ss-pro 2020. 11. 19. 23:22
반응형

ini파일의 경우 설정파일을 저장할때 많이사용하며 C,C++등에서 많이 사용된 파일입니다. 먼저 INI파일 구조에 대하여 알아보겠습니다. Section, Key, Value로 이루어져있습니다. Section단위로 구분을 할수 있으며 해당 Section내에 Key값과 Value값으로 설정파일을 저장합니다.

항목
Section [DB]
Key sa
Value 1234

C#에서 INI파일을 사용하여 파일을 읽고/쓰기를 할때는 GetPrivateProfileString/WritePrivateProfileString WinAPI함수를 사용합니다. 

[전체소스코드]

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
 
// 출처
// https://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C
 
namespace IniFileTest
{
    class Program
    {
        static void Main(string[] args)
        {
 
            IniFile iniFile = new IniFile(@"c:\setting.ini");
 
            iniFile.IniWriteValue("DB""ID""sa");
            iniFile.IniWriteValue("DB""PWD""1234");
            Console.WriteLine("IniFile Write....");
 
 
            string id = iniFile.IniReadValue("DB""ID");
            string pwd = iniFile.IniReadValue("DB""PWD");
            Console.WriteLine("IniFile Read....");
            Console.WriteLine("DB ID:{0} ,PWD:{1}");
 
        }
    }
 
    /// <summary>
    /// Create a New INI file to store or load data
    /// </summary>
    public class IniFile
    {
        public string path;
 
        //Ini 쓰기 WinApi선언
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section,string key, 
string val, string filePath);
 
        //Ini 읽기 WinApi선언
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section,string key, 
string def, StringBuilder retVal,int size, string filePath);
 
        /// <summary>
        /// INIFile Constructor.
        /// </summary>
        /// <PARAM name="INIPath"></PARAM>
        public IniFile(string INIPath)
        {
            path = INIPath;
        }
        /// <summary>
        /// Write Data to the INI File
        /// </summary>
        /// <PARAM name="Section"></PARAM>
        /// Section name
        /// <PARAM name="Key"></PARAM>
        /// Key Name
        /// <PARAM name="Value"></PARAM>
        /// Value Name
        public void IniWriteValue(string Section, string Key, string Value)
        {
            WritePrivateProfileString(Section, Key, Value, this.path);
        }
 
        /// <summary>
        /// Read Data Value From the Ini File
        /// </summary>
        /// <PARAM name="Section"></PARAM>
        /// <PARAM name="Key"></PARAM>
        /// <PARAM name="Path"></PARAM>
        /// <returns></returns>
        public string IniReadValue(string Section, string Key)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp,
                                            255this.path);
            return temp.ToString();
         }
    }
}