// [ DllImport ( "kernel32" ) ]
//private static extern long WritePrivateProfileString ( string section , string key , string val , string filePath ) ;
//參數說明:section:INI文件中的段落;key:INI文件中的關鍵字;val:INI文件中關鍵字的數值;filePath:INI文件的完整的路徑和名稱。
//C#申明INI文件的讀操作函數GetPrivateProfileString():
//[ DllImport ( "kernel32" ) ]
//private static extern int GetPrivateProfileString ( string section , string key , string def , StringBuilder retVal , int size , string filePath ) ;
//參數說明:section:INI文件中的段落名稱;key:INI文件中的關鍵字;
//def:無法讀取時候時候的缺省數值;retVal:讀取數值;size:數值的大小;filePath:INI文件的完整路徑和名稱。
//
//第一種,簡單操作類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
namespace ConsoleApplication1
{
class INIhelp
{
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);
//ini文件名稱
private static string inifilename = "Config.ini";
//獲取ini文件路徑
private static string inifilepath = Directory.GetCurrentDirectory() + "\\" + inifilename;
public static string GetValue(string key)
{
StringBuilder s = new StringBuilder(1024);
GetPrivateProfileString("CONFIG",key,"",s,1024,inifilepath);
return s.ToString();
}
public static void SetValue(string key,string value)
{
try
{
WritePrivateProfileString("CONFIG", key, value, inifilepath);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
// 使用
static void Main(string[] args)
{
INIhelp.SetValue("data", "abcdefg");
INIhelp.SetValue("哈哈", "123456");
INIhelp.SetValue("呵呵", "123456");
INIhelp.SetValue("數據庫", "123456");
INIhelp.SetValue("123", "123456");
Console.WriteLine("寫入完成");
Console.ReadLine();
string s = INIhelp.GetValue("data");
Console.WriteLine(s);
string a = INIhelp.GetValue("哈哈");
Console.WriteLine(a);
string b = INIhelp.GetValue("123");
Console.WriteLine(b);
Console.ReadLine();
//刪除,設置為null即可
INIhelp.SetValue("1", null);
}
//第二種 完全操作類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace MSFramework.Common
{
/// <summary>
/// ini文件類
/// </summary>
public class IniFile
{
private string m_FileName;
public string FileName
{
get { return m_FileName; }
set { m_FileName = value; }
}
[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileInt(
string lpAppName,
string lpKeyName,
int nDefault,
string lpFileName
);
[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(
string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
int nSize,
string lpFileName
);
[DllImport("kernel32.dll")]
private static extern int WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpString,
string lpFileName
);
/// <summary>
/// 構造函數
/// </summary>
/// <param name="aFileName">Ini文件路徑</param>
public IniFile(string aFileName)
{
this.m_FileName = aFileName;
}
/// <summary>
/// 構造函數
/// </summary>
public IniFile()
{ }
/// <summary>
/// [擴展]讀Int數值
/// </summary>
/// <param name="section">節</param>
/// <param name="name">鍵</param>
/// <param name="def">默認值</param>
/// <returns></returns>
public int ReadInt(string section, string name, int def)
{
return GetPrivateProfileInt(section, name, def, this.m_FileName);
}
/// <summary>
/// [擴展]讀取string字符串
/// </summary>
/// <param name="section">節</param>
/// <param name="name">鍵</param>
/// <param name="def">默認值</param>
/// <returns></returns>
public string ReadString(string section, string name, string def)
{
StringBuilder vRetSb = new StringBuilder(2048);
GetPrivateProfileString(section, name, def, vRetSb, 2048, this.m_FileName);
return vRetSb.ToString();
}
/// <summary>
/// [擴展]寫入Int數值,如果不存在 節-鍵,則會自動創建
/// </summary>
/// <param name="section">節</param>
/// <param name="name">鍵</param>
/// <param name="Ival">寫入值</param>
public void WriteInt(string section, string name, int Ival)
{
WritePrivateProfileString(section, name, Ival.ToString(), this.m_FileName);
}
/// <summary>
/// [擴展]寫入String字符串,如果不存在 節-鍵,則會自動創建
/// </summary>
/// <param name="section">節</param>
/// <param name="name">鍵</param>
/// <param name="strVal">寫入值</param>
public void WriteString(string section, string name, string strVal)
{
WritePrivateProfileString(section, name, strVal, this.m_FileName);
}
/// <summary>
/// 刪除指定的 節
/// </summary>
/// <param name="section"></param>
public void DeleteSection(string section)
{
WritePrivateProfileString(section, null, null, this.m_FileName);
}
/// <summary>
/// 刪除全部 節
/// </summary>
public void DeleteAllSection()
{
WritePrivateProfileString(null, null, null, this.m_FileName);
}
/// <summary>
/// 讀取指定 節-鍵 的值
/// </summary>
/// <param name="section"></param>
/// <param name="name"></param>
/// <returns></returns>
public string IniReadValue(string section, string name)
{
StringBuilder strSb = new StringBuilder(256);
GetPrivateProfileString(section, name, "", strSb, 256, this.m_FileName);
return strSb.ToString();
}
/// <summary>
/// 寫入指定值,如果不存在 節-鍵,則會自動創建
/// </summary>
/// <param name="section"></param>
/// <param name="name"></param>
/// <param name="value"></param>
public void IniWriteValue(string section, string name, string value)
{
WritePrivateProfileString(section, name, value, this.m_FileName);
}
}
}
//使用
IniFile myIni = new IniFile(Environment.CurrentDirectory + "\\Config.ini");
myIni.WriteInt("Tsection", "tName", 89);
Console.WriteLine(myIni.ReadString("System", "MainFormName", ""));
Console.WriteLine(myIni.ReadString("DbServer", "DbFile", ""));
myIni.WriteString("DbServer", "DbFile", @"E:\Work\test2.db");
Console.WriteLine(myIni.ReadString("DbServer", "DbServer", ""));
Console.WriteLine(myIni.ReadString("DbServer", "DbFile", ""));