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;
}
}
}