using System.Collections.Generic; using System.IO; namespace FSO.Files { public class IniFile : Dictionary { 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 { public string Name { get; set; } } }