不知道在哪里看到的了,现在把它们综合记于此。
我们写的程序中,总有一些配置信息需要保存下来,以便完成程序功能,最简单的办法就是将这些信息写入INI文件中,程序初始化的时候再读入。
具体应用如下:
一、将信息写入INI文件
1. 所用的WINAPI函数原型为----
- BOOL WritePrivateProfileString(
- LPCTSTR lpAppName,
- LPCTSTR lpKeyName,
- LPCTSTR lpString,
- LPCTSTR lpFileName
- );
其中各参数的意义:
- LPCTSTR lpAppName 是INI文件中的一个字段名.
- LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.
- LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.
- LPCTSTR lpFileName 是完整的INI文件名.
2. 具体使用方法
设现有一名学生,需把他的姓名和年龄写入c:/stud/student.ini 文件中.
- CString strName,strTemp;
- int nAge;
- strName="张三";
- nAge=12;
- ::WritePrivateProfileString("StudentInfo","Name",strName,"c://stud//student.ini");
此时c:/stud/student.ini文件的内容如下:
[StudentInfo]
Name=张三
(注意没有分号,在张三名字之后)
3. 要将学生的年龄保持下来,只需将整型的值变为字符型即可:
- strTemp.Format("%d",nAge);
- ::WritePrivateProfileString("StudentInfo","Age",strTemp,"c://stud//student.ini");
二、将信息从INI文件中读入程序中的变量。
1. 所用的WINAPI函数原型为
- DWORD GetPrivateProfileString(
- LPCTSTR lpAppName,
- LPCTSTR lpKeyName,
- LPCTSTR lpDefault,
- LPTSTR lpReturnedString,
- DWORD nSize,
- LPCTSTR lpFileName
- );
其中各参数的意义:
前二个参数与WritePrivateProfileString中的意义一样。
- lpDefault: 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.
- lpReturnedString: 接收INI文件中的值的CString对象,即目的缓存器.
- nSize: 目的缓存器的大小.
- lpFileName: 是完整的INI文件名.
2. 具体使用方法:要将上一步写入的学生信息读入程序中。
- CString strStudName;
- int nStudAge;
- GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c://stud//student.ini");
执行后,strStudName的值为“张三”,若前两个参数有误,其值为“默认姓名”。
3. 读入整型值需要另外一个WINAPI函数
- UINT GetPrivateProfileInt(
- LPCTSTR lpAppName,
- LPCTSTR lpKeyName,
- INT nDefault,
- LPCTSTR lpFileName
- );
参数的意义同上。使用方法如下:
- UINT nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c://stud//student.ini");
三、循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来。
1. 写入
- CString strTemp,strTempA;
- int i;
- int nCount=6;//共有6个文件名需要保存
- for(i=0;i<nCount;++i)
- {
- strTemp.Format("%d",i);
- strTempA=文件名;//文件名可以从数组,列表框等处取得.
- ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,
- "c://usefile//usefile.ini");
- }
- strTemp.Format("%d",nCount);
- ::WritePrivateProfileString("FileCount","Count",strTemp,"c://usefile//usefile.ini");//将文件总数写入,以便读出.
2.读出
- int nCount=::GetPrivateProfileInt("FileCount","Count",0,"c://usefile//usefile.ini");
- for(i=0;i<nCount;++i)
- {
- strTemp.Format("%d",i);
- strTemp="FileName"+strTemp;
- ::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c://usefile//usefile.ini");
- //使用strTempA中的内容.
- }
补充四点:
1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.
2.文件名的路径中必须为 // ,因为在VC++中, // 才表示一个 / .
3.也可将INI文件放在程序所在目录,此时 lpFileName 参数为: ".//student.ini".
4.从网页中粘贴源代码时,最好先粘贴至记事本中,再往VC中粘贴,否则易造成编译错误,