C#에서 Windows API를 이용한 설정 파일 읽기 및 쓰기

간단한 애플리케이션의 설정 정보를 저장하고 관리하기 위해 INI 파일을 사용하는 경우가 있습니다. Windows 운영체제는 이러한 INI 파일을 직접 처리할 수 있는 API를 제공하며, C#에서는 P/Invoke를 통해 이러한 API를 호출할 수 있습니다. 이 방법을 사용하면 별도의 라이브러리 없이 기본적인 설정 파일 기능을 구현할 수 있습니다.

Windows API를 통해 INI 파일을 읽고 쓰기 위해서는 kernel32.dll 라이브러리에 포함된 두 가지 핵심 함수를 사용합니다. 이 함수들은 각각 GetPrivateProfileStringWritePrivateProfileString입니다.

// Windows API에서 제공하는 설정 파일 읽기 함수
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
private static extern uint GetPrivateProfileString(
    string lpAppName,    // 섹션 이름
    string lpKeyName,    // 키 이름
    string lpDefault,    // 기본값
    StringBuilder lpReturnedString, // 반환될 값이 저장될 StringBuilder
    uint nSize,         // 반환될 값의 최대 크기
    string lpFileName);  // 설정 파일 경로

// Windows API에서 제공하는 설정 파일 쓰기 함수
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
private static extern uint WritePrivateProfileString(
    string lpAppName,    // 섹션 이름
    string lpKeyName,    // 키 이름
    string lpString,     // 저장할 값
    string lpFileName);  // 설정 파일 경로

이 함수들을 C#에서 사용하기 위한 래퍼(Wrapper) 메서드를 작성하면 편리하게 사용할 수 있습니다. 아래는 파일 경로를 자동으로 처리하고, 값을 읽고 쓰는 간단한 헬퍼 클래스의 예시입니다.

public static class IniFileHelper
{
    public static void WriteConfigValue(string section, string key, string value)
    {
        string configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app_config.ini");
        WritePrivateProfileString(section, key, value, configFilePath);
    }

    public static string ReadConfigValue(string section, string key)
    {
        StringBuilder result = new StringBuilder(512);
        string configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app_config.ini");
        GetPrivateProfileString(section, key, "기본값", result, (uint)result.Capacity, configFilePath);
        return result.ToString();
    }
}

이 헬퍼 클래스를 사용하여 Windows Forms 애플리케이션에서 설정 파일을 관리하는 예제를 살펴보겠습니다. 이 예제에서는 프로그램이 시작될 때 설정 파일에 '보레이트' 값을 기록하고, 버튼을 클릭하면 해당 값을 읽어와 텍스트 상자에 표시합니다.

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

namespace ConfigFileExampleApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        // Windows API 함수 선언 (위의 코드와 동일)
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        private static extern uint GetPrivateProfileString(...);
        
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        private static extern uint WritePrivateProfileString(...);

        private void MainForm_Load(object sender, EventArgs e)
        {
            // 프로그램 시작 시 설정 파일에 기본값 기록
            IniFileHelper.WriteConfigValue("설정", "보레이트", "9600");
        }

        private void 표시버튼_Click(object sender, EventArgs e)
        {
            // 설정 파일에서 값 읽어와 텍스트 박스에 표시
            보레이트TextBox.Text = IniFileHelper.ReadConfigValue("설정", "보레이트");
        }
    }
}

태그: C# Windows API INI 파일 설정 파일

5월 26일 20:15에 게시됨