Nothing major, just figured somebody might be able to use it. A basic INI reader/writer utility. using System.Globalization; using System.Runtime.InteropServices; using System.Text; namespace INI { public class INIReader { private readonly string _filePath; private Encoding _encoding = Encoding.ASCII; public INIReader(string filePath) { _filePath = filePath; } public Encoding Encoding { get { return _encoding; } set { _encoding = value; } } [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string Key, string value, StringBuilder result, int size, string filePath); public string ReadString(string section, string key, string defaultValue = null) { var temp = new StringBuilder(500); GetPrivateProfileString(section, key, "", temp, 500, _filePath); var strValue = temp.ToString(); return string.IsNullOrEmpty(strValue) && defaultValue != null ? defaultValue : strValue; } public int ReadInt(string section, string key, NumberStyles style, int defaultValue = 0) { int i; return int.TryParse(ReadString(section, key).Replace("0x", ""), style, null, out i) ? i : defaultValue; } public float ReadFloat(string section, string key, float defaultValue = 0) { float f; return float.TryParse(ReadString(section, key), out f) ? f : defaultValue; } public double ReadDouble(string section, string key, double defaultValue = 0) { double d; return double.TryParse(ReadString(section, key), out d) ? d : defaultValue; } public decimal ReadDecimal(string section, string key, decimal defaultValue = 0) { decimal d; return decimal.TryParse(ReadString(section, key), out d) ? d : defaultValue; } public bool ReadBoolean(string section, string key, bool defaultValue = false) { bool b; return bool.TryParse(ReadString(section, key), out b) ? b : defaultValue; } } public class INIWriter { private readonly string _filePath; public INIWriter(string filePath) { _filePath = filePath; } [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); public void WriteString(string section, string key, string value, string comment = null) { var concatValue = comment != null ? string.Format("{0} ; {1}", value, comment) : value; WritePrivateProfileString(section, key, concatValue, _filePath); } public void WriteInt(string section, string key, int value, string comment = null) { WriteString(section, key, value.ToString(), comment); } public void WriteFloat(string section, string key, float value, string comment = null) { WriteString(section, key, value.ToString(), comment); } public void WriteDouble(string section, string key, double value, string comment = null) { WriteString(section, key, value.ToString(), comment); } public void WriteDecimal(string section, string key, decimal value, string comment = null) { WriteString(section, key, value.ToString(), comment); } public void WriteBoolean(string section, string key, bool value, bool useNumeric = false, string comment = null) { if (useNumeric) WriteString(section, key, value ? "1" : "0", comment); else WriteString(section, key, value.ToString(), comment); } } }