[C#] ini 환경 설정 파일을 다루는 방법


Development note/C#  2019. 6. 26. 09:00

안녕하세요. 명월입니다.


이 글은 C#에서 ini 환경 설정 파일을 다루는 방법에 대한 글입니다.


사실 C#에서는 환경 설정 파일로는 ini 파일을 사용하지 않고 app.config 파일을 다룹니다.

링크 - C#에서 환경설정 파일을 다루는 방법(System.Configuration)


ini파일은 예전 C++과 MFC에서 사용하던 환경 설정 파일입니다. 아마 거의 C#에서는 사용하실 분이 없을 꺼라고 생각하는데 혹시나 해서 작성했습니다.

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

namespace Example
{
  public static class ConfigSystem
  {
    // C의 dll함수 마샬링
	// 함수의 파라미터는 section명, 키명, 값, 파일 위치
    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
    // C의 dll함수 마샬링
	// 함수의 파라미터는 section명, 키명, 디폴트 값(값이 없을 때, 나오는 값), String pointer, 크기, 파일 위치
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

    // ini파일에 값을 작성하는 함수
    public static void WriteConfig(string file, string section, string key, string val)
    {
      WritePrivateProfileString(section, key, val, GetFile(file));
    }
    // ini파일에서 값을 가져오는 함수
    public static string ReadConfig(string file, string section, string key)
    {
      // C#에서는 포인터를 명시적으로 표현할 수 없기 때문 StringBuilder로 가져옵니다.
      StringBuilder temp = new StringBuilder(255);
      int ret = GetPrivateProfileString(section, key, null, temp, 255, GetFile(file));
      return temp.ToString();
    }
    private static string GetFile(string file)
    {
      return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, file + ".ini");
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      //config.ini 파일에 SectionTest 세션의 data키로 Hello world가 저장된다.
      ConfigSystem.WriteConfig("config", "SectionTest", "data", "Hello world");

      //config.ini 파일에 SectionTest 세션의 키가 data의 값을 가져온다.
      Console.WriteLine(ConfigSystem.ReadConfig("config", "SectionTest", "data"));

      Console.WriteLine("Press any key...");
      Console.ReadKey();
    }
  }
}

사실 WritePrivateProfileString와 GetPrivateProfileString의 경우는 C#의 라이브러리 함수가 아니고 예전 C언어에서 사용하던 라이브러리 함수입니다. C#에서 C언어의 라이브러리 함수를 사용하기 위해서는 마샬링을 해야합니다.

링크 - [C++] C++ Dll 만들어서 C#에서 사용하기 (마샬링)


결과 화면입니다.

Main 함수에서 config.ini 파일을 작성하고 읽어 오니 결과는 당연히 hello world가 될 것입니다. config.ini 파일을 확인하겠습니다.

여기까지 C#에서 ini 환경설정 파일을 다루는 방법에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.