mysimulation/server/tso.files/IniFile.cs
Tony Bark 8fec258215 Added FSO.Files for use with the API server
Don't ask me. FreeSO is the prime example of dependency hell.
2024-05-01 04:38:12 -04:00

59 lines
1.9 KiB
C#
Executable file

using System.Collections.Generic;
using System.IO;
namespace FSO.Files
{
public class IniFile : Dictionary<string, IniSection>
{
public static IniFile Read(string path){
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)){
var result = new IniFile();
result.Decode(stream);
return result;
}
}
public void Decode(Stream stream)
{
IniSection currentSection = null;
using (var reader = new StreamReader(stream)){
string line = null;
while((line = reader.ReadLine()) != null){
line = line.TrimStart();
if (line.StartsWith(";")){
//Comment
}else if (line.StartsWith("[")){
//Section
currentSection = new IniSection();
currentSection.Name = line.Substring(1);
currentSection.Name = currentSection.Name.Substring(0, currentSection.Name.LastIndexOf("]"));
this.Add(currentSection.Name, currentSection);
}
else
{
//Could be a key / value
var split = line.IndexOf("=");
if(split != -1 && currentSection != null && split+1 < line.Length){
var key = line.Substring(0, split).Trim();
var value = line.Substring(split + 1).TrimStart();
if(key.Length > 0)
{
currentSection[key] = value;
}
}
}
}
}
}
}
public class IniSection : Dictionary<string, string>
{
public string Name { get; set; }
}
}