很多时候,我们的程序运行前需要用户做一些相关的设置,而且我们总是需要把一些配置信息保存下来,那天一直在思考怎么解决这个问题,突然就想到了在一些软件安装目录下的ini文件,然后经过查找资料发现其实ini文件既方便又实用。下面对其使用进行总结:
一、将信息从ini文件中读取到变量中
首先,看一个ini文件的示例。
[连接参数]
IpServer=127.0.0.1
DataBase=DB_TEST
UserID=test
Password=123456
;注释用英文分号
以上就是一个简单的配置文档。读取信息所用的函数为
DWORD GetPrivateProfileString(LPCTSTR lpAppName, // section nameLPCTSTR lpKeyName, // key nameLPCTSTR lpDefault, // default stringLPTSTR lpReturnedString, // destination bufferDWORD nSize, // size of destination bufferLPCTSTR lpFileName // initialization file name
);
-
第一个参数为字段名,上例中的[连接参数];
-
第二个参数键名,即变量名,上例中的IpServer、DataBase等等;
-
第三个参数指,如果ini文件中没有前两个参数指定的字段名或键名,则将lpDefault的值赋给变量,也就是缺省值;
-
第四个参数是接收ini文件中键名的值的CString对象,即目的缓存器;
-
第五个参数是目的缓存器的大小;
-
第六个参数是ini文件的完整路径。如下:
GetPrivateProfileString(L"连接参数",L"ipServer",L"127.0.0.1",
ipStr.GetBuffer(MAX_PATH),MAX_PATH,curPath);
在此额外说一点,一般来说ini文件和exe文件是放在一起的,所以这里涉及到当前路径的问题,可用另一个全局函数也可以实现,假如我们的文件是配置.ini,则如下:
CString curPath;//存储路径的CString对象
AfxGetModuleFileName(AfxGetInstanceHandle(),curPath);
curPath=curPath.Left(curPath.ReverseFind('\\'))+'\\';
curPath.AppendFormat(L"配置.ini");
或者还可以使lpFileName的值为:“.//配置.ini” 来定位到当前目录(这种方法笔者还未测试)。
此外,读取整型值便要用另一个函数:
UINT GetPrivateProfileInt(LPCTSTR lpAppName, // section nameLPCTSTR lpKeyName, // key nameINT nDefault, // return value if key name not foundLPCTSTR lpFileName // initialization file name
);
二、将配置信息保存到ini文件中
类似地,所用函数为:
BOOL WritePrivateProfileString(LPCTSTR lpAppName, // section nameLPCTSTR lpKeyName, // key nameLPCTSTR lpString, // string to addLPCTSTR lpFileName // initialization file
);
参数与读取的时候意义基本一致,而且比读取的时候更简单一点,在此不作赘述。
最后,需要注意的一点是,文件名的路径中反斜杠必须为\\
才表示\
,第一个为转义字符。