안녕하세요. 회원여러분.
오늘은 C#의 ini파일 조회/저장/수정에 대해 알아보겠습니다.
1. ini파일이란?
응용프로그램 실행시 필요한 초기 정보를 가지고 있는 파일로써, 아스키 파일로 구성되어 있어 일반 텍스트 편집기(메모장 등)로
수정할 수 있습니다.
2. ini파일의 사용 목적.
2.1 사용자가 해당 응용프로그램을 통해 마지막으로 입력(등록)한 정보를 저장하고, 실행시 출력하도록 사용할 수 있습니다.
2.2 또한 응용프로그램의 수정을 최소화 목적으로 사용할 수 있습니다.
예를들어 응용프로그램에 특정값을 하드코딩할 경우 ini파일에 저장하여 값 수정시 ini파일 수정/재배포를 통해
응용프로그램의 수정을 최소화할 수 있습니다.
3. ini파일의 구성.
색션(Section), 키(Key), 값(Value)으로 구성되어 있으며, 응용프로그램은 색션(Section)-키(Key)의 값(Value)을 저장/수정/조회
합니다.
4. C#으로 ini파일 조회/저장/수정.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//해당 코드 추가.
using System.Runtime.InteropServices;
namespace iniFileTest
{
public partial class Form1 : Form
{
private string _iniPath = Application.StartupPath + @"\\test.ini";
/// <summary>
/// ini파일의 색션(Section)-키(Key)의 값(Value)을 조회(가져오기).
/// </summary>
/// <param name="section">색션(Section)</param>
/// <param name="key">키(Key)</param>
/// <param name="def"></param>
/// <param name="retVal"></param>
/// <param name="size"></param>
/// <param name="filePath"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
/// <summary>
/// ini파일의 색션(Section)-키(Key)의 값(Value)을 저장/수정.
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="val"></param>
/// <param name="filePath"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
private static extern int WritePrivateProfileString(string section, string key, string val, string filePath);
public Form1()
{
InitializeComponent();
}
/// <summary>
/// GetPrivateProfileString()함수를 사용하여 ini파일의 색션(Section)-키(Key)의 값(Value)을 조회(가져오기).
///
/// 이 함수를 사용하는 이유는 GetPrivateProfileString()함수는 값(Value)을 StringBuilder클래스 형태로 반환하는데
/// 개인적으로 StringBuilder클래스보다 string 형태로 반환하는 것이 사용하는데 더 용이하기 때문.
/// </summary>
/// <param name="section">색션</param>
/// <param name="key">키</param>
/// <param name="valueCapacity">ini파일에 저장된 값 크기. StringBuilder클래스는 값의 크기를 선언해야 하며, ini파일에 저장된 색션(Section)-키(Key)의 값(Value)에 따라 선언해야 된다.</param>
/// <param name="filePath">ini파일 위치.</param>
/// <returns></returns>
public string GetIniValue(string section, string key, int valueCapacity, string filePath)
{
string ReturnValue;
StringBuilder tmp = new StringBuilder(255);
int i = GetPrivateProfileString(section, key, "", tmp, 255, filePath);
ReturnValue = tmp.ToString();
return ReturnValue;
}
/// <summary>
/// WritePrivateProfileString()함수를 사용하여 ini파일의 색션(Section)-키(Key)의 값(Value)을 저장/수정.
/// </summary>
/// <param name="section">색션</param>
/// <param name="key">키</param>
/// <param name="value">저장/수정하려는 값</param>
/// <param name="filePath">ini파일 위치.</param>
public static void SetIniValue(string section, string key, string value, string filePath)
{
WritePrivateProfileString(section, key, value, filePath);
}
private void Form1_Load(object sender, EventArgs e)
{
GetIniValues();
}
private void btnSaveFruit_Click(object sender, EventArgs e)
{
SetIniValue("Fruit", "001", txtFruit_001.Text, _iniPath);
SetIniValue("Fruit", "002", txtFruit_002.Text, _iniPath);
SetIniValue("Fruit", "003", txtFruit_003.Text, _iniPath);
}
private void btnSaveCar_Click(object sender, EventArgs e)
{
SetIniValue("Car", "001", txtCar_001.Text, _iniPath);
SetIniValue("Car", "002", txtCar_002.Text, _iniPath);
SetIniValue("Car", "003", txtCar_003.Text, _iniPath);
}
private void GetIniValues()
{
txtFruit_001.Text = GetIniValue("Fruit", "001", 30, _iniPath);
txtFruit_002.Text = GetIniValue("Fruit", "002", 30, _iniPath);
txtFruit_003.Text = GetIniValue("Fruit", "003", 30, _iniPath);
txtCar_001.Text = GetIniValue("Car", "001", 30, _iniPath);
txtCar_002.Text = GetIniValue("Car", "002", 30, _iniPath);
txtCar_003.Text = GetIniValue("Car", "003", 30, _iniPath);
}
}
}
위 소스코드를 실행하면 다음과 같습니다.
ini파일 조회/저장/수정 경로는 _iniPath 변수로 선언하였습니다.
현재 ini파일의 저장위치는 다음과 같습니다.
만약 저장/수정시 선언된 경로에 ini파일이 없다면, WritePrivateProfileString()함수에서 자동 생성합니다.
프로그램 실행 시 FormLoad()이벤트에 GetIniValues()를 사용하여 저장된 ini파일의 값을 조회하여 해당 컨트롤에 출력
합니다.
ini파일을 직접 실행하면 다음과 같습니다.
ini파일를 보면 색션(Section)-키(Key)의 값을 확인할 수 있습니다.
위 소스코드의 프로젝트도 같이 올려드리니 참고하시기 바랍니다.
이상 사이버지식정보방이었습니다.
'C#' 카테고리의 다른 글
[C#] MSSQL DB에 접속 및 쿼리문 사용. (0) | 2021.07.31 |
---|---|
[StringBuilder] C# StringBuilder 사용하기. (0) | 2021.07.27 |
[C#] 프로그램 중복실행을 방지하자! (0) | 2021.07.14 |
[C#] 현재 PC에 설치되어 있는 글꼴 정보 가져오기. (0) | 2021.07.13 |
[C#] DataTable 두개를 Merge 하기. (합치기) (0) | 2021.07.12 |