1. 概述
ini 文件是Initialization File的缩写,即初始化文件。很多系统配置使用INI文件,其实INI文件就是简单的文本文件,只不过这种txt文件要遵循一定的INI文件格式。.INI ”就是英文 “initialization”的头三个字母的缩写;当然INI file的后缀名也不一定是".ini"也可以是".cfg",“.conf ”或者是”.txt"。
2. ini文件结构
INI文件由节、键、值组成。
节
[section]
参数(键=值)
name=value
注解
注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。
INI文件的格式很简单,最基本的三个要素是:parameters,sections和comments。
什么是parameters?
ini所包含的最基本的“元素”就是parameter;每一个parameter都有一个name和一个value,name和value是由等号“=”隔开。name在等号的左边。
如:
name = value
什么是sections ?
所有的parameters都是以sections为单位结合在一起的。所有的section名称都是独占一行,并且sections名字都被方括号包围着([ and ])。在section声明后的所有parameters都是属于该section。对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。Sections一般情况下不能被nested,当然特殊情况下也可以实现sections的嵌套。
section如下所示:
[section]
什么是comments ?
在INI文件中注释语句是以分号“;”开始的。所有的所有的注释语句不管多长都是独占一行直到结束的。在分号和行结束符之间的所有内容都是被忽略的。
ini文件示例
; exp ini file
[imgSize]
width=11
height=12
[system]
user=admin
pass=1234
ipaddress=192.167.1.1
[General]
language=中文
3. ini文件的读取、写入
写文件:
// 写入.ini文件
void writeini(QString filename)
{
QSettings *settings = new QSettings(filename, QSettings::IniFormat);
// 设置文件编码,配置文件中使用中文时,这是必须的,否则乱码
settings->setIniCodec(QTextCodec::codecForName("UTF8"));
//直接setValue(组/键,值)方式写入
settings->setValue("/imgSize/width", 11);
settings->setValue("/imgSize/height", 12);
//先设置组,然后setValue(键,值)方式写入,效果同上
settings->beginGroup("system");
settings->setValue("user", "admin");
settings->setValue("pass", "1234");
settings->setValue("ipaddress", "192.167.1.1");
settings->endGroup();
// 写入中文字符
QString value = QString::fromLocal8Bit("中文");
settings->setValue("language", value);
delete settings;
return;
}
读文件:
// 读取.ini文件
void readini(QString filename)
{
QSettings *settings = new QSettings(filename, QSettings::IniFormat);
//设置文件编码,配置文件中使用中文时,这是必须的,否则乱码
settings->setIniCodec(QTextCodec::codecForName("UTF8"));
//按键读取
int img_width = settings->value( "imgSize/width").toInt();
int img_height = settings->value("imgSize/height").toInt();
QString user = settings->value( "/system/user").toString();
QString pass = settings->value("/system/pass").toString();
QString ipaddress = settings->value("/system/ipaddress").toString();
QString language = settings->value("language").toString(); //language = "中文"
//按组读取
settings->beginGroup("system"); //锁定一个组
QStringList keys = settings->allKeys(); //获取该组所有key
for (int i = 0; i < keys.count(); ++i)
{
QString key = keys[i];
QString value = settings->value(key).toString(); //直接根据key获取该组下对应key的值
}
delete settings;
return;
}