一、要想读取配置文件首先要学会写配置文件,那么配置文件是什么结构呢?请看下图:
配置文件由两部分构成:字段名和键名。可以看到我圈出来两个颜色的方框,其中红色的两个方框就是字段名,每个字段下包含其字段的键名和键值,蓝色的方框就是键名和键值。
二、知道配置文件的结构之后我们就可以读配置文件了,
读配置文件要用到函数GetPrivateProfileString();看一下函数说明
DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefaut,LPSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);
头文件:
windows.h
返回值 :
DWORD -----------------------------返回字符串的实际大小,根据系统环境不同失败返回值不同(0或-1)?
网上查找到的资料返回-1,我的实际系统返回0,返回值一定要自己验证!!!
形参:
LPCTSTR lpAppName ---------- INI配置文件中的一个字段名,也就是上图中红色方框中的内容,这个字串不区分大小写;
LPCTSTR lpKeyName ---------- INI配置文件下的一个key键名,也就是上图中蓝色方框的内容,这个字 串不区分大小写;
LPCTSTR lpDefaut ----------------如果配置文件中没有找到前两个的参数值,则将此参数默认值赋给变量。一般设为空("");
LPSTR lpReturnedString ---------指定一个字符串缓冲区,用来接收INI文件中的返回值的CString对象;
DWORD nSize ----------------------指的是前一个参数对象的缓冲区的大小
LPCTSTR lpFileName ------------完整的INI文件路径名
举个例子还是上图中的配置文件,现在我要读取config下的Port字符:
char port[20]; //接收配置文件字符的缓冲区
DWORD res; //返回值
res= GetPrivateProfileString("config", "Port", "", port, sizeof(port), "config.ini");
三、如果现在我们需要写配置文件呢
读配置文件要用到函数WritePrivateProfileString();看一下函数说明
bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);
参数基本同读配置文件,
返回值为bool类型,返回是否写成功
直接举例子吧:我要在配置文件config.ini下写一个config2字段中的一个ip键值
bool res; //返回值
res= WritePrivateProfileString("config2", "Ip", "192.168.0.12", "config.ini");
三、注意事项
找不到配置文件
有些环境中GetPrivateProfileString函数找不到配置文件中的配置文件需要加路径,注意是绝对路径,如果用绝对路径也找不到的话,注意在windows下路径中的/斜杠为\双反斜杠。
获当前路径
如果不想在程序中写死配置文件路径的话,则需要获取当前路径,可以用函数GetCurrentDirectory来获取当前路径,转换为string再加上\+配置文件名称就可以得到配置文件的绝对路径。
char current_Dir[1024] = { 0 };
DWORD res = GetCurrentDirectory(1024, current_Dir);
//res判断省略
string str_Dir = current_Dir;
str_Dir += "\\configure.ini";//绝对路径为str_Dir
char get_Info[1024] = { 0 };
res = GetPrivateProfileString("字段", "键名", "默认值", get_Info, 1024, str_Dir.c_str());
//res 判断省略