一,C#读写ini文件
INI文件就是扩展名为"ini"的文件。
其一般形式如下:
[section1] // 配置节
//键名 //键值
keyword1 = valuel
keyword2 = value2
……
[section2]
keyword3 = value3
keyword4 = value4
在Windows系统中,INI文件是很多,最重要的就是"System.ini"、"System32.ini"和"Win.ini"。该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改INI文件,来改变应用程序和系统的很多配置。但自从Windows 95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。以及XML文件的国际标准化给INI文件又一次打击。
但在某些场合,INI文件还拥有其不可替代的地位。比如绿色软件的规定就是不向注册表和系统中填入新东西。对于软件需要储存的信息就需要存入到文件中了。XML虽然兼容性比较好,但对于仅仅保存几个自定义参数而言就显得大材小用了。这是就可以选择使用快速简单的储存方式:INI文件。
本文就来探讨一下C#是如何对INI进行读写操作。
主要思路是调用Win32 API。
1.引入命名空间
2.声明(把一个Win32 API函数转成C#函数)
[DllImport( " kernel32 " )]
private static extern long WritePrivateProfileString( string section, string key, string val, string filePath);
// 声明INI文件的读操作函数 GetPrivateProfileString()
[DllImport( " kernel32 " )]
private static extern int GetPrivateProfileString( string section, string key, string def, StringBuilder retVal, int size, string filePath);
3.函数
public void WriteValue( string section, string key, string value)
{
// section=配置节,key=键名,value=键值,path=路径
WritePrivateProfileString(section, key, value, sPath);
}
/* 从ini文件读取值 */
public string ReadValue( string section, string key)
{
// 每次从ini中读取多少字节
System.Text.StringBuilder temp = new System.Text.StringBuilder( 255 );
// section=配置节,key=键名,temp=上面,path=路径
GetPrivateProfileString(section, key, "" , temp, 255 , sPath);
return temp.ToString(); //注意类型的转换
}
到此基本功能已经实现了。下面我们将所有的代码重新整合一下:
{
public class Ini
{
// 声明INI文件的写操作函数 WritePrivateProfileString()
[System.Runtime.InteropServices.DllImport( " kernel32 " )]
private static extern long WritePrivateProfileString( string section, string key, string val, string filePath);
// 声明INI文件的读操作函数 GetPrivateProfileString()
[System.Runtime.InteropServices.DllImport( " kernel32 " )]
private static extern int GetPrivateProfileString( string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);
private string sPath = null ;
/* 构造函数 */
public Ini( string path)
{
this .sPath = path;
}
/* 写入值到ini文件 */
public void WriteValue( string section, string key, string value)
{
// section=配置节,key=键名,value=键值,path=路径
WritePrivateProfileString(section, key, value, sPath);
}
/* 从ini文件读取值 */
public string ReadValue( string section, string key)
{
// 每次从ini中读取多少字节
System.Text.StringBuilder temp = new System.Text.StringBuilder( 255 );
// section=配置节,key=键名,temp=上面,path=路径
GetPrivateProfileString(section, key, "" , temp, 255 , sPath);
return temp.ToString();
}
}
}
开始调用函数。
Ini ini = new Ini( " C:/config.ini " );
ini.WriteValue( " Setting " , " key1 " , " HELLO WORLD! " );
ini.WriteValue( " Setting " , " key2 " , " HELLO CHINA! " );
/*
在C盘下生成自动生成一个config.ini文件,内容如下:
[Setting]
key1=HELLO WORLD!
key2=HELLO CHINA!
*/
// 读取ini
Ini ini = new Ini( " C:/config.ini " );
string str1 = ini.ReadValue( " Setting " , " key1 " );
MessageBox.Show(str1);
/*
str1显示为 HELLO WORLD!;
*/
2,使用StreamWriter写入文件
在System.IO空间中定义了一个文件写入器对象StreamWriter,使用它可以以一种特定的编码向输出流中(Stream)写入字符。
3,使用SteamReader 读取文件
与streamWrite对应