C# INI파일 사용하기

Today Jeeho Learned·2022년 11월 23일
0

C#

목록 보기
10/17
post-thumbnail
post-custom-banner

INTRO

INI 파일은 보통 프로그램 정보를 저장하는 텍스트 문서를 말한다.
2주차 과제를 진행하면서 수동버전에서 자동버전으로 바꿔서 작성할 때 프로그램을 잠깐 지연해주는 delay(매개변수)함수에 들어가는 매개변수값을 INI파일에서 설정한 값으로 변경해주면서 테스트의 진행속도를 내가 설정한 값으로 조절할 수 있었다.

설정

        string inipath = @"INI파일의 위치로 지정하기INI파일이름.ini";

        [DllImport("kernel32.dll")]
        private static extern int GetPrivateProfileString(String section, String key, String def, StringBuilder retVal, int size, String filePath);

        public String GetIniValue(String Section, String Key)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp, 255, inipath);
            return temp.ToString();
        }

보통 DllImport쪽에서 ALT+ENTER를 누르면 using System.Runtime.InteropServices 이라는 라이브러리가 추가된다. API라고하는데 구글링해보니 대부분의 블로그에서 INI환경설정할때 사용하고 있었다.

INI파일 생성하기

이렇게 환경구성하는 파일은 실제로 아무나 열수있는 파일이기에 보안적으로 암호화가 반드시 필요한 부분이다. 순수히 텍스트형식으로 작성해보겠다.
[TestInterval]
INTERVAL_VALUE=1

메모장을 만들고 위에 정보를 저장한다. 여기서 주의해야할 것은 위에 지정한 저장경로의 파일명과 같아야한다. 나는 하나의 값만을 주면 되기때문에 INTERVAL_VALUE 값만을 주었다.
여기서 TestInterval 해당하는 값을 section 이라고하고, INTERVAL_VALUE을 key, 1로 들어간 값을 value라고 한다.

적용

        private void AutoTestButton_Click(object sender, EventArgs e)
        {
            LogTextbox.Text += "AIF_LED_CONTROL Testing..." + Environment.NewLine;
            byte startByte = 0xFA;
            byte endByte = 0x0A;
            int IntervalValue = 0;

            for (int i = 1; i <= 10; i++)
            {
                LogTextbox.Text += "LED#" + i + " Testing..." + Environment.NewLine;
                for (int j = 1; j <= 3; j++)
                {
                    byte led = Convert.ToByte(i);
                    byte type = Convert.ToByte(j);
                    byte[] data = new byte[4] { startByte, led, type, endByte };
                    AutoTestSerialPort.Write(data, 0, data.Length); //data를 다보내주기
                    //INI파일을 로드한 값중에 InterVal값을 가지고 와서 interval값이 1 이면 Delay(1*1000)을 적용한다.
                    string Interval = GetIniValue("TestInterval", "INTERVAL_VALUE");
                    IntervalValue = Int32.Parse(Interval);
                    Delay(IntervalValue * 1000); //딜레이를 주지 않아서 데이터가 한번에 다들어갔었음! 꼭 간격주기
                    Array.Clear(data, 0x0, data.Length); // btye block 초기화
                }
            }
        }

실제로 작성한 코드에서 ini설정을 적용했다.
string Interval = GetIniValue("TestInterval", "INTERVAL_VALUE") 이렇게 작성하면 interval에는 1이라는 값이 string 형태로 저장되어있다. 내가 필요한 것은 int이기 때문에
string을 int형으로 변환시켜 사용했다. 원하는 값대로 잘 들어갔다.

[DllImport("kernel32.dll")]
private static extern long WritePrivateProfileString(String section,String key,String val,String filePath);

        public void SetIniValue(String Section, String Key, String Value)
        {
            WritePrivateProfileString(Section, Key, Value, iniPath);
        }

원래는 위의 코드를 활용하여 예시로 set_INIvalue("PACKAGE","AAA","밥토깽이");를 작성하면
INI파일을 자동으로 열어서 [PACKAGE]의 AAA의 파라미터값을 '밥토깽이' 문자열로 지정해준다.
이렇게 변경해주는 것인데 그냥 저장한 메모장에서 바꾸고 저장해주어도 잘 적용된다.

profile
기록해야 (살아)남는다 !
post-custom-banner

0개의 댓글