Software/C#
설정값 저장을 위한 ini 파일 과 yaml 파일 사용방법 - C#
sihwankim
2023. 11. 29. 14:47
반응형
장비제어 프로그램 개발시에 시스템의 하드웨어 설정값등을 저장하고 불러 오는 용도로 ini 파일 저장과 yaml 파일 저장 방법을 사용할 수 있도록 테스트 프로그램을 작성해 보았습니다.
ini 파일 저장은 인터넷에 있는 Class 를 다운받아 사용하였습니다. yaml 은 YamlDotNet 라이브러리를 사용하였습니다.
코드 작성이나 향후 항목 변경이 되었을 경우 코드 변경에서는 yaml이 편하고 좋습니다. 하지만 프로그램 사용자가 yaml 데이타를 직접 수정할 경우에는 규칙을 지켜서 수정해야 하는 번거로움은 좀 있네요..
파일에 저장되는 형태는 아래와 같습니다.
ini 저장 데이타 파일
[Temperature]
Offset-1=12.3
Offset-2=53.987
[System]
Name=test
Item-1=0
yaml 저장 데이타 파일
temperature:
Offset1: 3
Offset2: 4
system:
Name: bbb
Item1: 3
Item2: 0
ListItems:
- 11
- 22
- 33
아래 코드는 yaml 사용에 대한 내용입니다.
public class MachineData
{
public class Temperature
{
public double Offset1 { get; set; }
public double Offset2 { get; set; }
}
public class System
{
public string Name { get; set; }
public int Item1 { get; set; }
public int Item2 { get; set; }
public List<double> ListItems { get; set; }
public System()
{
ListItems = new List<double>();
}
}
public Temperature temperature = new Temperature();
public System system = new System();
}
public class YamlControl<T>
{
public void SaveYaml(string FileName, T data)
{
var serializer = SerializeToYaml(data);
using StreamWriter sw = new StreamWriter(FileName);
sw.Write(serializer);
}
public T LoadYaml(string FileName)
{
T machine = DeserializeFromYaml<T>(FileName);
return machine;
}
private string SerializeToYaml<T>(T obj)
{
var serializer = new SerializerBuilder().Build();
return serializer.Serialize(obj);
}
// Deserialize YAML to an object
private T DeserializeFromYaml<T>(string yaml)
{
var deserializer = new DeserializerBuilder().Build();
return deserializer.Deserialize<T>(File.ReadAllText(yaml));
}
}
반응형