1 public class INIFileUtil 2 { 3 /// <summary> 4 /// INI文件地址 5 /// </summary> 6 private string path; 7 8 /// <summary> 9 /// 初始化 10 /// </summary> 11 /// <param name="INIPath">路径</param> 12 private INIFileUtil(string INIPath) 13 { 14 this.path = INIPath; 15 } 16 17 public static INIFileUtil LoadIniFile(string iniFile) 18 { 19 return new INIFileUtil(iniFile); 20 } 21 /// <summary> 22 /// 构造函数 23 /// </summary> 24 private INIFileUtil() 25 { 26 } 27 28 [DllImport("kernel32", EntryPoint = "WritePrivateProfileString")] 29 private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); 30 [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")] 31 private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); 32 [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")] 33 private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath); 34 [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileSectionNames", CharSet = CharSet.Ansi)] 35 private static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath); 36 [DllImport("KERNEL32.DLL ", EntryPoint = "GetPrivateProfileSection", CharSet = CharSet.Ansi)] 37 private static extern int GetPrivateProfileSection(string lpAppName, byte[] lpReturnedString, int nSize, string filePath); 38 39 40 /// <summary> 41 /// 写INI文件 42 /// </summary> 43 /// <param name="Section">分组节点</param> 44 /// <param name="Key">关键字</param> 45 /// <param name="Value">值</param> 46 public void IniWriteValue(string Section, string Key, string Value) 47 { 48 INIFileUtil.WritePrivateProfileString(Section, Key, Value, this.path); 49 } 50 51 /// <summary> 52 /// 读取INI文件 53 /// </summary> 54 /// <param name="Section">分组节点</param> 55 /// <param name="Key">关键字</param> 56 /// <returns></returns> 57 public string IniReadValue(string Section, string Key) 58 { 59 StringBuilder stringBuilder = new StringBuilder(255); 60 INIFileUtil.GetPrivateProfileString(Section, Key, "", stringBuilder, 255, this.path); 61 return stringBuilder.ToString(); 62 } 63 64 /// <summary> 65 /// 读取INI文件 66 /// </summary> 67 /// <param name="section">分组节点</param> 68 /// <param name="key">关键字</param> 69 /// <returns></returns> 70 public byte[] IniReadValues(string section, string key) 71 { 72 byte[] array = new byte[255]; 73 INIFileUtil.GetPrivateProfileString(section, key, "", array, 255, this.path); 74 return array; 75 } 76 77 /// <summary> 78 /// 删除ini文件下所有段落 79 /// </summary> 80 public void ClearAllSection() 81 { 82 this.IniWriteValue(null, null, null); 83 } 84 85 /// <summary> 86 /// 删除ini文件下指定段落下的所有键 87 /// </summary> 88 /// <param name="Section">指定段</param> 89 public void ClearSection(string Section) 90 { 91 this.IniWriteValue(Section, null, null); 92 } 93 94 /// <summary> 95 /// 读取一个ini里面所有的节 96 /// </summary> 97 /// <param name="sections"></param> 98 /// <param name="path"></param> 99 /// <returns></returns> 100 public int GetAllSectionNames(out List<string> sections) 101 { 102 int MAX_BUFFER = 32767; 103 IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER); 104 int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, this.path); 105 if (bytesReturned == 0) 106 { 107 sections = new List<string>(); 108 return -1; 109 } 110 string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString(); 111 Marshal.FreeCoTaskMem(pReturnedString); 112 //use of Substring below removes terminating null for split 113 sections = local.Substring(0, local.Length - 1).Split('\0').ToList<string>(); 114 return 0; 115 } 116 117 /// <summary> 118 /// 得到某个节点下面所有的key和value组合 119 /// </summary> 120 /// <param name="section"></param> 121 /// <param name="keys"></param> 122 /// <param name="values"></param> 123 /// <param name="path"></param> 124 /// <returns></returns> 125 public int GetAllKeyValues(string section, out string[] keys, out string[] values) 126 { 127 byte[] b = new byte[65535]; 128 129 GetPrivateProfileSection(section, b, b.Length, this.path); 130 string s = System.Text.Encoding.Default.GetString(b); 131 string[] tmp = s.Split((char)0); 132 ArrayList result = new ArrayList(); 133 foreach (string r in tmp) 134 { 135 if (r != string.Empty) 136 result.Add(r); 137 } 138 keys = new string[result.Count]; 139 values = new string[result.Count]; 140 for (int i = 0; i < result.Count; i++) 141 { 142 string[] item = result[i].ToString().Split(new char[] { '=' }); 143 if (item.Length == 2) 144 { 145 keys[i] = item[0].Trim(); 146 values[i] = item[1].Trim(); 147 } 148 else if (item.Length == 1) 149 { 150 keys[i] = item[0].Trim(); 151 values[i] = ""; 152 } 153 else if (item.Length == 0) 154 { 155 keys[i] = ""; 156 values[i] = ""; 157 } 158 } 159 return 0; 160 } 161 }