using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Text; namespace UtilLib { public class IniHelper { #region API函数声明 [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); //需要调用GetPrivateProfileString的重载 [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")] private static extern long GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")] private static extern uint GetPrivateProfileStringA(string section, string key, string def, Byte[] retVal, int size, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileSection(string section, byte[] retVal, int size, string filePath); #endregion /// /// 获取某个section下的所有key和value /// /// /// /// public static Dictionary GetKeyValuesBySection(string iniFile, string section) { int size = 65536; byte[] buffer = new byte[size]; Dictionary result = new Dictionary(); int bytesRead = GetPrivateProfileSection(section, buffer, size, iniFile); if (bytesRead > 0) { string sectionData = Encoding.Default.GetString(buffer, 0, bytesRead - 1); string[] keyValuePairs = sectionData.Split('\0'); foreach (string pair in keyValuePairs) { if (!string.IsNullOrEmpty(pair)) { int equalSignIndex = pair.IndexOf('='); if (equalSignIndex > 0) { string key = pair.Substring(0, equalSignIndex).Trim(); string value = pair.Substring(equalSignIndex + 1).Trim(); result[key] = value; } } } } return result; } public static List ReadListBySection(string iniFile, string section) { int size = 65536; byte[] buffer = new byte[size]; List result = new List(); int bytesRead = GetPrivateProfileSection(section, buffer, size, iniFile); if (bytesRead > 0) { string sectionData = Encoding.Default.GetString(buffer, 0, bytesRead - 1); string[] keyValuePairs = sectionData.Split('\0'); foreach (string pair in keyValuePairs) { if (!string.IsNullOrEmpty(pair)) { result.Add(pair); } } } return result; } public static List ReadSections(string iniFilename) { List result = new List(); Byte[] buf = new Byte[65536]; uint len = GetPrivateProfileStringA(null, null, null, buf, buf.Length, iniFilename); int j = 0; for (int i = 0; i < len; i++) { if (buf[i] == 0) { result.Add(Encoding.Default.GetString(buf, j, i - j)); j = i + 1; } } return result; } public static List ReadKeys(string SectionName, string iniFilename) { List result = new List(); Byte[] buf = new Byte[65536]; uint len = GetPrivateProfileStringA(SectionName, null, null, buf, buf.Length, iniFilename); int j = 0; for (int i = 0; i < len; i++) { if (buf[i] == 0) { result.Add(Encoding.Default.GetString(buf, j, i - j)); j = i + 1; } } return result; } public static string ReadIniData(string Section, string Key, string NoText, string iniFilePath) { if (File.Exists(iniFilePath)) { StringBuilder temp = new StringBuilder(1024); GetPrivateProfileString(Section, Key, NoText, temp, 1024, iniFilePath); return temp.ToString(); } else return NoText; } public static bool WriteIniData(string Section, string Key, string Value, string iniFilePath) { if (File.Exists(iniFilePath) == false) { FileStream FS = new FileStream(iniFilePath, FileMode.CreateNew); } long OpStation = WritePrivateProfileString(Section, Key, Value, iniFilePath); if (OpStation == 0) return false; else return true; } } }