using System;
using System.Text;
using System.Runtime.InteropServices;
namespace Birdshome

{
///
<summary>
///
Create a new INI file to store or load data
///
</summary>
public
class IniFile

{
private
string m_Path;

# region Windows API Functions

[DllImport("kernel32")]
public
static
extern
long WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpReturnString,
string lpFilePath);

[DllImport("kernel32")]
public
static
extern
int GetPrivateProfileString(
string lpAppName,
string lpKeyName,
string lpDefault,
byte[] byBuffer,
int size,
string lpFilePath);

[DllImport("kernel32")]
public
static
extern
int WritePrivateProfileSection(
string lpAppName,
string lpString,
string lpFileName);

[DllImport("kernel32")]
public
static
extern
int GetPrivateProfileSection(
string lpAppName,
string lpReturnString,
string lpFilePath);

[DllImport("kernel32")]
public
static
extern
int GetPrivateProfileInt(
string lpAppName,
string lpKeyName,
int iDefault,
string lpFilePath);
#endregion
///
<summary>
///
IniFile Constructor.
///
</summary>
///
<PARAM name="IniPath"></PARAM>
public IniFile(
string strIniPath)

{

m_Path = strIniPath;

}
///
<summary>
///
Write Data to the INI File
///
</summary>
public
long SetValue(
string section,
string key,
string value)

{
return WritePrivateProfileString(section, key, value, m_Path);

}
///
<summary>
///
Read Data Value From the Ini File
///
</summary>
private
string [] GetValues(
string section,
string key)

{
byte [] buff;
int BUFFER_SIZE = 0xff;
int iCount, iBufferSize, iMultiple = 0;
do

{

iMultiple ++;

iBufferSize = BUFFER_SIZE*iMultiple;

buff =
new
byte[iBufferSize];

iCount = GetPrivateProfileString(section, key, "", buff, iBufferSize, m_Path);

}
while(iCount == iBufferSize-2);
for(
int i=0 ; i < iCount ; ++i )

{
if ( buff[i] == 0 && iCount != i+1 && buff[i+1] != 0 )

{

buff[i] = (
int)'\n';
continue;

}
if ( i > 0 && buff[i-1] == 0 && buff[i] == 0 )
break;

}
string strResult = Encoding.Default.GetString(buff).Trim();
return strResult.Trim(
new
char [] {'\0'}).Split(
new
char [] {'\n'});

}
public
string GetValue(
string section,
string key)

{
if ( section ==
null || key ==
null )

{
throw
new NullReferenceException("Section or Key");

}
return GetValues(section, key)[0];

}
public
string [] GetKeys(
string section)

{
if ( section ==
null )

{
throw
new NullReferenceException("Section");

}
return GetValues(section,
null);

}
public
string [] GetSections()

{
return GetValues(
null,
null);

}
public
long SetValueInt(
string section,
string key,
int value)

{
return SetValue(section, key, value.ToString());

}
public
int GetValueInt(
string section,
string key)

{
return GetPrivateProfileInt(section, key, -1, m_Path);

}
public
int SetSection(
string strSection,
string strKeyValue)

{
return WritePrivateProfileSection(strSection, strKeyValue, m_Path);

}
public
int DeleteSection(
string strSection)

{
return SetSection(strSection,
null);

}

}

}
本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。