본문 바로가기

SIMPLE C#/라이브러리

C# ini File Read/Write (UTF-8)

Source : https://gitlab.com/open-class/arSetting.git

Contact : tindevil@nate.com


C# 에서 INI 파일을 Read/Write 하기 위해서는 위와 같은 WIn32 API 를 사용해야 합니다.
[DllImport("kernel32", CharSet = CharSet.Unicode)]
        static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath);

        [DllImport("kernel32", CharSet = CharSet.Unicode)]
        static extern int GetPrivateProfileString(string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath);

다국어를 고려하지 않는 환경에서는 문제가 없지만 다른 언어의 윈도우를 번갈아 사용 한다거나 UTF 인코딩된 파일을 읽고 쓰려면 해당 API는 지원을 하지 않아 글자가 깨지게 되어 이 클래스를 만들었습니다.


클래스를 사용하기 위해서는 블로그에 첨부된 DLL파일을 참조 하거나 상단 Source 항목을 이용하여 GitLab 에서 소스를 받아서 프로젝트 첨부를 하면 됩니다.

(Visual Studio DLL 혹은 프로젝트 참조 하는 방법 보기)


arSetting 이라는 클래스는 INI외에 xml 을 기록하는데 사용하는 클래스이며 iniHelper 가 이곳에 포함되어 있어서 별도의 포스팅을 하며 후에 arSetting 도 포스트 할 예정입니다.


다음은 사용 샘플 코드 입니다.

static void Main(string[] args)
        {
            string file = AppDomain.CurrentDomain.BaseDirectory + "setting.ini";
            arUtil.INIHelper ini = new arUtil.INIHelper(file);
            if(ini.Exist()==false)
            {
                ini.CreateFile();
                Console.WriteLine("설정파일이 생성됨 파일위치 = " + file);
            }
         
            var portName = ini.get_Data("setting", "port", "");
            var portName2 = ini.get_Data("setting", "port2", "");
            var projectName = ini.get_Data("info", "project");
            if (projectName == "")
            {
                ini.set_Data("info", "project", "test project");
                ini.Flush();
            }

            Console.WriteLine("ini port name = " + portName);
            Console.WriteLine("ini port2 name = " + portName2);
            Console.WriteLine("project name = " + projectName);
            Console.WriteLine("press any key");
            Console.ReadKey();
        }


객체 생성시에 사용할 INI 파일을 입력하게 되며 get_Data 와 set_Data 함수로 값을 읽고쓸수 있습니다.

이 클래스는 지정된 INI파일의 내용을 메모리에 두고 그값을 사용하므로 값을 변경했을 때에는 Flush()를 호출 해야 실제 파일에 기록됩니다. 또한 임의로 파일의 내용을 변경한 후 그 값을 읽으려면 .Load() 를 호출 해야 합니다.


명령어 설명 입니다.


값읽기 : get_Data(섹션,키,기본값) : 값이 없는 경우 기본값의 값이 반환되면 모든 값은 String 으로 반환

값쓰기 : set_Data(섹션,키,값) : 값을 기록합니다.(메모리상 기록이므로 파일 기록은 flush() 호출 필요)

파일쓰기 : Flush() : 메모리의 내용을 실제 파일에 기록 합니다.

파일읽기 : Load() : ini파일 내용을 메모리에 불러옵니다. (생성자에서 자도 호출 합니다)

파일확인 : Exist() : 파일이 존재하는지 True/False 로 반환합니다.


Download

--------------------------------------

ArSetting.Net4.dll

Sample_arINIHelper.zip


Sample Video

--------------------------------------