using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace DeviceHandler
{
/// <summary>
/// ini配置文件帮助类
/// </summary>
public class ConfigHandler
{
[DllImport("kernel32")]
static extern long WritePrivateProfileString(string section, string key, byte[] val, string filepath);
[DllImport("kernel32")]
static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);
string mSection;
string mConfigPath;
bool mNoSection = false;
/// <summary>
///
/// </summary>
/// <param name="fileName">文件名(例如:Config.ini)</param>
/// <param name="section"></param>
public ConfigHandler(string fileName, string section)
{
mConfigPath = Application.StartupPath + "\\" + fileName;
mSection = section;
}
/// <summary>
///
/// </summary>
/// <param name="fileName">文件名(例如:Config.ini)</param>
/// <param name="section"></param>
public ConfigHandler(string fileName)
{
mConfigPath = fileName;
mSection = "NOSECTION";
mNoSection = true;
}
private void addSecton()
{
//try
//{
string[] lines = File.ReadAllLines(mConfigPath);
string[] newLines = new string[lines.Length + 1];
newLines[0] = "["+ mSection + "]";
for (int i = 0; i < lines.Length; ++i)
{
newLines[i + 1] = lines[i];
}
File.WriteAllLines(mConfigPath, newLines);
//}
//catch (Exception exp)
//{
// Log.trace("addSecton Exception" + exp.ToString());
//}
}
private void delSection()
{
//try
//{
string[] lines = File.ReadAllLines(mConfigPath);
string[] newLines = new string[lines.Length - 1];
for (int i = 0; i < lines.Length - 1; ++i)
{
newLines[i] = lines[i + 1];
}
File.WriteAllLines(mConfigPath, newLines);
//}
//catch (Exception exp)
//{
// Log.trace("addSecton Exception" + exp.ToString());
//}
}
private static byte[] getBytes(string str)
{
return null == str ? null : Encoding.GetEncoding("utf-8").GetBytes(str);
}
/// <summary>
/// 从ini文件中获取值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string getValue(string key)
{
if (mNoSection)
{
addSecton();
}
StringBuilder temp = new StringBuilder(1024);
GetPrivateProfileString(mSection, key, "", temp, 1024, mConfigPath);
// Encoding.GetEncoding("utf-8").GetString(temp, 0, count).Trim();
if (mNoSection)
{
delSection();
}
return temp.ToString().Trim();
}
/// <summary>
/// 向ini文件写入值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void writeValue(string key, string value)
{
if (mNoSection)
{
addSecton();
}
WritePrivateProfileString(mSection, key, getBytes(value), mConfigPath);
if (mNoSection)
{
delSection();
}
}
}
}