mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-03-15 14:51:21 +00:00
59 lines
1.9 KiB
C#
Executable file
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; }
|
|
}
|
|
}
|