using System; using System.Runtime.InteropServices; using System.Text; class IniFile { [DllImport("kernel32", SetLastError=true)] private static extern int WritePrivateProfileString(string pSection, string pKey, string pValue, string pFile); [DllImport("kernel32", SetLastError=true)] private static extern int WritePrivateProfileStruct(string pSection, string pKey, string pValue, int pValueLen, string pFile); [DllImport("kernel32", SetLastError=true)] private static extern int GetPrivateProfileString(string pSection, string pKey, string pDefault, byte[] prReturn, int pBufferLen, string pFile); [DllImport("kernel32", SetLastError=true)] private static extern int GetPrivateProfileStruct(string pSection, string pKey, byte[] prReturn, int pBufferLen, string pFile); private int li_BufferLen; private Encoding le_Encoding; /// IniFile Constructor public IniFile(){ le_Encoding = Encoding.Default; li_BufferLen = 256; } /// Encoding public Encoding FileEncoding{ get{ return(le_Encoding); } set{ le_Encoding = value; } } // Max return length when reading data (Max: 32767) public int BufferLen{ get{ return li_BufferLen; } set{ if(value > Int16.MaxValue){ li_BufferLen = Int16.MaxValue; } else if(value < 1){ li_BufferLen = 1; } else{ li_BufferLen = value; } } } public string ReadValue(string pFile, string pSection, string pKey, string pDefault){ return(z_GetString(pFile, pSection, pKey, pDefault)); } public string ReadValue(string pFile, string pSection, string pKey){ return(z_GetString(pFile, pSection, pKey, "")); } public void WriteValue(string pFile, string pSection, string pKey, string pValue){ WritePrivateProfileString(pSection, pKey, pValue, pFile); } public void RemoveKey(string pFile, string pSection, string pKey){ WritePrivateProfileString(pSection, pKey, null, pFile); } public Array ReadKeys(string pFile, string pSection){ return(z_GetString(pFile, pSection, null, null).Split((char) 0)); } public Array ReadSections(string pFile){ return(z_GetString(pFile, null, null, null).Split((char) 0)); } public void RemoveSection(string pFile, string pSection){ WritePrivateProfileString(pSection, null, null, pFile); } private string z_GetString(string pFile, string pSection, string pKey, string pDefault){ string sRet = pDefault; byte[] bRet = new byte[li_BufferLen]; int i = GetPrivateProfileString(pSection, pKey, pDefault, bRet, li_BufferLen, pFile); sRet = le_Encoding.GetString(bRet, 0, i).TrimEnd((char) 0); return(sRet); } }