原文:
c# 操作ini文件
INI文件是一种按照特点方式排列的文本文件。每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等
号右边的就是关键字对应的值(value)。其一般形式如下:
[section1]
keyword1=value1
keyword2=value2
keyword3=value3
[section2]
keyword1=value1
keyword2=value2
号右边的就是关键字对应的值(value)。其一般形式如下:
[section1]
keyword1=value1
keyword2=value2
keyword3=value3
[section2]
keyword1=value1
keyword2=value2
class
Program
{
[DllImport( " kernel32 " )]
private static extern long WritePrivateProfileString ( string section , string key , string val , string filepath);
// 参数说明:section:INI文件中的段落;key:INI文件中的关键字;val:INI文件中关键字的数值;filePath:INI文件的完整的路径和名称。
[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文件的完整路径和名称。
public static void Main( string [] args)
{
string section = " database " ;
string key = " sql " ;
// string value="server.;database=pubs;uid=sa;pwd=";
string fileName = " d:\\config.ini " ;
try
{
// 写入ini节点
// WritePrivateProfileString(section,key,value,fileName);
// 读取ini节点
StringBuilder sb = new StringBuilder( 255 );
GetPrivateProfileString(section,key, " 无法读取 " ,sb, 255 ,fileName);
Console.WriteLine(sb.ToString());
} catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.Write( " Press any key to continue . . . " );
Console.ReadKey( true );
}
}
{
[DllImport( " kernel32 " )]
private static extern long WritePrivateProfileString ( string section , string key , string val , string filepath);
// 参数说明:section:INI文件中的段落;key:INI文件中的关键字;val:INI文件中关键字的数值;filePath:INI文件的完整的路径和名称。
[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文件的完整路径和名称。
public static void Main( string [] args)
{
string section = " database " ;
string key = " sql " ;
// string value="server.;database=pubs;uid=sa;pwd=";
string fileName = " d:\\config.ini " ;
try
{
// 写入ini节点
// WritePrivateProfileString(section,key,value,fileName);
// 读取ini节点
StringBuilder sb = new StringBuilder( 255 );
GetPrivateProfileString(section,key, " 无法读取 " ,sb, 255 ,fileName);
Console.WriteLine(sb.ToString());
} catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.Write( " Press any key to continue . . . " );
Console.ReadKey( true );
}
}
整理出ini文件操作辅且类
///
<summary>
/// 读写INI文件的类。
/// </summary>
public class INIHelper
{
// 读写INI文件相关。
[DllImport( " kernel32.dll " , EntryPoint = " WritePrivateProfileString " , CharSet = CharSet.Ansi)]
public static extern long WritePrivateProfileString( string section, string key, string val, string filePath);
[DllImport( " kernel32.dll " , EntryPoint = " GetPrivateProfileString " , CharSet = CharSet.Ansi)]
public static extern int GetPrivateProfileString( string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImport( " kernel32.dll " , EntryPoint = " GetPrivateProfileSectionNames " , CharSet = CharSet.Ansi)]
public static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath);
[DllImport( " KERNEL32.DLL " , EntryPoint = " GetPrivateProfileSection " , CharSet = CharSet.Ansi)]
public static extern int GetPrivateProfileSection( string lpAppName, byte [] lpReturnedString, int nSize, string filePath);
/// <summary>
/// 向INI写入数据。
/// </summary>
/// <PARAM name="Section"> 节点名。 </PARAM>
/// <PARAM name="Key"> 键名。 </PARAM>
/// <PARAM name="Value"> 值名。 </PARAM>
public static void Write( string Section, string Key, string Value, string path)
{
WritePrivateProfileString(Section, Key, Value, path);
}
/// <summary>
/// 读取INI数据。
/// </summary>
/// <PARAM name="Section"> 节点名。 </PARAM>
/// <PARAM name="Key"> 键名。 </PARAM>
/// <PARAM name="Path"> 值名。 </PARAM>
/// <returns> 相应的值。 </returns>
public static string Read( string Section, string Key, string path)
{
StringBuilder temp = new StringBuilder( 255 );
int i = GetPrivateProfileString(Section, Key, "" , temp, 255 , path);
return temp.ToString();
}
/// <summary>
/// 读取一个ini里面所有的节
/// </summary>
/// <param name="sections"></param>
/// <param name="path"></param>
/// <returns></returns>
public static int GetAllSectionNames( out string [] sections, string path)
{
int MAX_BUFFER = 32767 ;
IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER);
int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path);
if (bytesReturned == 0 )
{
sections = null ;
return - 1 ;
}
string local = Marshal.PtrToStringAnsi(pReturnedString, ( int )bytesReturned).ToString();
Marshal.FreeCoTaskMem(pReturnedString);
// use of Substring below removes terminating null for split
sections = local.Substring( 0 , local.Length - 1 ).Split( ' \0 ' );
return 0 ;
}
/// <summary>
/// 得到某个节点下面所有的key和value组合
/// </summary>
/// <param name="section"></param>
/// <param name="keys"></param>
/// <param name="values"></param>
/// <param name="path"></param>
/// <returns></returns>
public static int GetAllKeyValues( string section, out string [] keys, out string [] values, string path)
{
byte [] b = new byte [ 65535 ];
GetPrivateProfileSection(section, b, b.Length, path);
string s = System.Text.Encoding.Default.GetString(b);
string [] tmp = s.Split(( char ) 0 );
ArrayList result = new ArrayList();
foreach ( string r in tmp)
{
if (r != string .Empty)
result.Add(r);
}
keys = new string [result.Count];
values = new string [result.Count];
for ( int i = 0 ; i < result.Count; i ++ )
{
string [] item = result[i].ToString().Split( new char [] { ' = ' });
if (item.Length == 2 )
{
keys[i] = item[ 0 ].Trim();
values[i] = item[ 1 ].Trim();
}
else if (item.Length == 1 )
{
keys[i] = item[ 0 ].Trim();
values[i] = "" ;
}
else if (item.Length == 0 )
{
keys[i] = "" ;
values[i] = "" ;
}
}
return 0 ;
}
}
/// 读写INI文件的类。
/// </summary>
public class INIHelper
{
// 读写INI文件相关。
[DllImport( " kernel32.dll " , EntryPoint = " WritePrivateProfileString " , CharSet = CharSet.Ansi)]
public static extern long WritePrivateProfileString( string section, string key, string val, string filePath);
[DllImport( " kernel32.dll " , EntryPoint = " GetPrivateProfileString " , CharSet = CharSet.Ansi)]
public static extern int GetPrivateProfileString( string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImport( " kernel32.dll " , EntryPoint = " GetPrivateProfileSectionNames " , CharSet = CharSet.Ansi)]
public static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath);
[DllImport( " KERNEL32.DLL " , EntryPoint = " GetPrivateProfileSection " , CharSet = CharSet.Ansi)]
public static extern int GetPrivateProfileSection( string lpAppName, byte [] lpReturnedString, int nSize, string filePath);
/// <summary>
/// 向INI写入数据。
/// </summary>
/// <PARAM name="Section"> 节点名。 </PARAM>
/// <PARAM name="Key"> 键名。 </PARAM>
/// <PARAM name="Value"> 值名。 </PARAM>
public static void Write( string Section, string Key, string Value, string path)
{
WritePrivateProfileString(Section, Key, Value, path);
}
/// <summary>
/// 读取INI数据。
/// </summary>
/// <PARAM name="Section"> 节点名。 </PARAM>
/// <PARAM name="Key"> 键名。 </PARAM>
/// <PARAM name="Path"> 值名。 </PARAM>
/// <returns> 相应的值。 </returns>
public static string Read( string Section, string Key, string path)
{
StringBuilder temp = new StringBuilder( 255 );
int i = GetPrivateProfileString(Section, Key, "" , temp, 255 , path);
return temp.ToString();
}
/// <summary>
/// 读取一个ini里面所有的节
/// </summary>
/// <param name="sections"></param>
/// <param name="path"></param>
/// <returns></returns>
public static int GetAllSectionNames( out string [] sections, string path)
{
int MAX_BUFFER = 32767 ;
IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER);
int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path);
if (bytesReturned == 0 )
{
sections = null ;
return - 1 ;
}
string local = Marshal.PtrToStringAnsi(pReturnedString, ( int )bytesReturned).ToString();
Marshal.FreeCoTaskMem(pReturnedString);
// use of Substring below removes terminating null for split
sections = local.Substring( 0 , local.Length - 1 ).Split( ' \0 ' );
return 0 ;
}
/// <summary>
/// 得到某个节点下面所有的key和value组合
/// </summary>
/// <param name="section"></param>
/// <param name="keys"></param>
/// <param name="values"></param>
/// <param name="path"></param>
/// <returns></returns>
public static int GetAllKeyValues( string section, out string [] keys, out string [] values, string path)
{
byte [] b = new byte [ 65535 ];
GetPrivateProfileSection(section, b, b.Length, path);
string s = System.Text.Encoding.Default.GetString(b);
string [] tmp = s.Split(( char ) 0 );
ArrayList result = new ArrayList();
foreach ( string r in tmp)
{
if (r != string .Empty)
result.Add(r);
}
keys = new string [result.Count];
values = new string [result.Count];
for ( int i = 0 ; i < result.Count; i ++ )
{
string [] item = result[i].ToString().Split( new char [] { ' = ' });
if (item.Length == 2 )
{
keys[i] = item[ 0 ].Trim();
values[i] = item[ 1 ].Trim();
}
else if (item.Length == 1 )
{
keys[i] = item[ 0 ].Trim();
values[i] = "" ;
}
else if (item.Length == 0 )
{
keys[i] = "" ;
values[i] = "" ;
}
}
return 0 ;
}
}