配置文件

在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入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,           //是INI文件中的一个字段名.

 

  LPCTSTR lpKeyName,           //是lpAppName下的一个键名,通俗讲就是变量名.

 

  LPCTSTR lpDefault,           //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.

 

  LPTSTR lpReturnedString,     //接收INI文件中的值的CString对象,即目的缓存器.

 

  DWORD nSize,                 //目的缓存器的大小.

 

  LPCTSTR lpFileName           //是完整的INI文件名.

 

 

  );

 

  其中各参数的意义:

 

  前二个参数与 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

 

  );

 

  这里的参数意义与上相同.使用方法如下:

 

  nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c://stud//student.ini"); 

 

  三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:

 

  1.写入:

 

  CString strTemp,strTempA;

 

  int i;

 

  int nCount=6;

 

  文件://共有6个文件名需要保存

 

  for(i=0;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.读出:

 

  nCount=::GetPrivateProfileInt("FileCount","Count",0,"c://usefile//usefile.ini");

 

  for(i=0;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中粘贴,否则易造成编译错误,开始时我也十分不解,好好的代码怎么就不对呢?后来才找到这个方法.还有一些代码中使用了全角字符如:<,\等,也会造成编译错误.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值