1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
   | public class IniFile {     [System.Runtime.InteropServices.DllImport("kernel32")]     private static extern long WritePrivateProfileString(byte[] section, byte[] key, byte[] val, string filePath);
      [System.Runtime.InteropServices.DllImport("kernel32")]     private static extern int GetPrivateProfileString(byte[] section, byte[] key, byte[] def, System.Text.StringBuilder retVal, int size, string filePath);
      [System.Runtime.InteropServices.DllImport("kernel32", EntryPoint = "GetPrivateProfileString")]     private static extern uint GetPrivateProfileString2(byte[] section, byte[] key, byte[] def, byte[] retVal, int size, string filePath);
      private string sPath = null;
      public IniFile(string path)     {         this.sPath = path;     }
           public void WriteIni(string section, string key, string value)     {         WritePrivateProfileString(GetBytes(section), GetBytes(key), GetBytes(value), sPath);     }
      public void WriteIni(string section, string key, string value, string sPath)     {         WritePrivateProfileString(GetBytes(section), GetBytes(key), GetBytes(value), sPath);     }
           public string ReadIni(string section, string key, string sPath)     {         System.Text.StringBuilder temp = new System.Text.StringBuilder(255);         GetPrivateProfileString(GetBytes(section), GetBytes(key), GetBytes(""), temp, 255, sPath);                  return Encoding.UTF8.GetString(Encoding.Default.GetBytes(temp.ToString()));     }
      public string ReadIni(string section, string key)     {         System.Text.StringBuilder temp = new System.Text.StringBuilder(255);         GetPrivateProfileString(GetBytes(section), GetBytes(key), GetBytes(""), temp, 255, sPath);                  return Encoding.UTF8.GetString(Encoding.Default.GetBytes(temp.ToString()));     }
      public void GreatIni(string path)     {         if (!File.Exists(path))         {             FileStream FS = new FileStream(path, FileMode.CreateNew);             FS.Close();         }     }
      private byte[] GetBytes(string str, string encodingName = "utf-8")     {         return str == null ? null : Encoding.GetEncoding(encodingName).GetBytes(str);     }
      public List<string> ReadSections(string iniFilename)     {         List<string> result = new List<string>();         Byte[] buf = new Byte[65536];         uint len = GetPrivateProfileString2(null, null, null, buf, buf.Length, iniFilename);         int j = 0;         for (int i = 0; i < len; i++)             if (buf[i] == 0)             {                 result.Add(Encoding.UTF8.GetString(buf, j, i - j));                 j = i + 1;             }         return result;     }
      public List<string> ReadKeys(string SectionName)     {         List<string> result = new List<string>();         Byte[] buf = new Byte[65536];         uint len = GetPrivateProfileString2(GetBytes(SectionName), null, null, buf, buf.Length, sPath);         int j = 0;         for (int i = 0; i < len; i++)             if (buf[i] == 0)             {                 result.Add(Encoding.UTF8.GetString(buf, j, i - j));                 j = i + 1;             }         return result;     }
      public Dictionary<string, string> ReadKeyValues(string SectionName)     {         Dictionary<string, string> keyValues = new Dictionary<string, string>();         List<string> keys = ReadKeys(SectionName);         keys.ForEach((key) =>         {             keyValues.Add(key, ReadIni(SectionName, key));         });         return keyValues;     } }
   |