当前位置:C++技术网 > 资讯 > ini配置文件的读写

ini配置文件的读写

更新时间:2015-06-26 13:47:03浏览次数:1+次

    很多时候,我们的程序运行前需要用户做一些相关的设置,而且我们总是需要把一些配置信息保存下来,那天一直在思考怎么解决这个问题,突然就想到了在一些软件安装目录下的ini文件,然后经过查找资料发现其实ini文件既方便又实用。下面对其使用进行总结:

一、将信息从ini文件中读取到变量中

    首先,看一个ini文件的示例。

[连接参数]
IpServer=127.0.0.1
DataBase=DB_TEST
UserID=test
Password=123456
;注释用英文分号

    以上就是一个简单的配置文档。读取信息所用的函数为

DWORD GetPrivateProfileString( 
 LPCTSTRlpAppName, // section name 
 LPCTSTRlpKeyName, // key name 
 LPCTSTRlpDefault,    // default string  
 LPTSTRlpReturnedString, // destination buffer 
 DWORDnSize,             // size of destination buffer
 PCTSTRlpFileName        // 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文件是放在一起的,所以这里涉及到当前路径的问题,该问题在本站《如何获取EXE可执行文件的所在路径》一文中讲得很清楚,而在此我用另一个全局函数也可以实现,假如我们的文件是配置.ini,则如下:

CString curPath;//存储路径的CString对象
AfxGetModuleFileName(AfxGetInstanceHandle(),curPath);
curPath=curPath.Left(curPath.ReverseFind('\\'))+'\\';
curPath.AppendFormat(L"配置.ini");

    或者还可以使lpFileName的值为:“.//配置.ini”来定位到当前目录(这种方法笔者还未测试)。

    此外,读取整型值便要用另一个函数:

UINT GetPrivateProfileInt( 
 LPCTSTRlpAppName, // section name 
 LPCTSTRlpKeyName, // key name 
 INTnDefault,      // return value if key name not found
 LPCTSTRlpFileName  // initialization file name
);

二、将配置信息保存到ini文件中

    类似地,所用函数为:

BOOL WritePrivateProfileString( 
 LPCTSTRlpAppName, // section name 
 LPCTSTRlpKeyName, // key name  
 LPCTSTRlpString,  // string to add 
 LPCTSTRlpFileName  // initialization file
);

    参数与读取的时候意义基本一致,而且比读取的时候更简单一点,在此不作赘述。

    最后,需要注意的一点是,文件名的路径中反斜杠必须为\\才表示\,第一个为转义字符。