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환경설정할때 사용하고 있었다.
이렇게 환경구성하는 파일은 실제로 아무나 열수있는 파일이기에 보안적으로 암호화가 반드시 필요한 부분이다. 순수히 텍스트형식으로 작성해보겠다.
[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의 파라미터값을 '밥토깽이' 문자열로 지정해준다.
이렇게 변경해주는 것인데 그냥 저장한 메모장에서 바꾸고 저장해주어도 잘 적용된다.