[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);
#endregion
public Dictionary<string, Dictionary<string, string>> ReadSections()
{
Dictionary<string, Dictionary<string, string>> dicc = new Dictionary<string, Dictionary<string, string>>();
List<string> strSecList = ReadSections(filePath);
foreach (string strSec in strSecList)//遍历有多少Section
{
List<string> listLeftKey = ReadKeys(strSec);
Dictionary<string, string> dicTemp = new Dictionary<string, string>();
foreach (string strKey in listLeftKey)//遍历有多少Section
{
string strValue = ReadIniData(strSec, strKey, "EMPTY");
dicTemp.Add(strKey, strValue);
}
dicc.Add(strSec, dicTemp);
}
return dicc;
}
public static List<string> ReadSections(string iniFilename)
{
List<string> result = new List<string>();
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 List<string> ReadKeys(String SectionName)
{
return ReadKeys(SectionName, filePath);
}
public static List<string> ReadKeys(string SectionName, string iniFilename)
{
List<string> result = new List<string>();
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 void SetFilePath(String filepath)
{
filePath = filepath;
}
#region 读Ini文件
public string ReadIniData(string Section, string Key, string NoText)
{
return ReadIniData(Section, Key, NoText, filePath);
}
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 String.Empty;
}
#endregion
#region 写Ini文件
public static bool WriteIniData(string Section, string Key, string Value)
{
return WriteIniData(Section, Key, Value, filePath);
}
public static bool WriteIniData(string Section, string Key, string Value, string iniFilePath)
{
if (File.Exists(iniFilePath))
{
long OpStation = WritePrivateProfileString(Section, Key, Value, iniFilePath);
if (OpStation == 0)
return false;
else return true;
}
else return false;
}
#endregion