codefans

导航

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

程序设计链接

搜索

最新评论

阅读排行榜

评论排行榜

在VC++中读写INI文件

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

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

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


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

  1.写入:

CString strTemp,strTempA;
int i;
int nCount=6;
file://共有6个文件名需要保存
for(i=0;i {strTemp.Format("%d",i);
strTempA=文件名;
file://文件名可以从数组,列表框等处取得.
::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,
"c:\\usefile\\usefile.ini");
}
strTemp.Format("%d",nCount);
::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");
file://将文件总数写入,以便读出.

  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");

file://使用strTempA中的内容.

}

  补充四点:

   1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.

   2.文件名的路径中必须为 \\ ,因为在VC++中, \\ 才表示一个 \ .

   3.也可将INI文件放在程序所在目录,此时 lpFileName 参数为: ".\\student.ini".

   4.从网页中粘贴源代码时,最好先粘贴至记事本中,再往VC中粘贴,否则易造成编译错误,开始时我也十分不解,好好的代码怎么就不对呢?后来才找到这个方法.还有一些代码中使用了全角字符如:<,\等,也会
造成编译错误.

posted on 2005-08-05 10:39 春雷的博客 阅读(12969) 评论(2)  编辑  收藏

评论

# re: 在VC++中读写INI文件 2013-07-10 11:50 C++Lover

谢谢指教。  回复  更多评论   

# re: 在VC++中读写INI文件 2015-02-04 16:09 dasjfoais

 我记得小的时候经历过离奇般的童话故事。这是在小说中会发生的事情却降临在我的身上,我也不想不到,一切都是如此的离奇。

  我们是很要好的伙伴,小的时候,根本不懂什么叫男女有别,只知道,我喜欢和他玩,家在海边,我们常常会去那海边,在那里建我们的城堡沙雕。过我们的王子与公主的生活,更实在的说是过家家九。这是多么简单的童年,可是,时间可以培养感情,我们形影不离。有时候,大人还会拿我们开玩笑,说多么像对小两口。可是我们之间是那种十分单纯的爱。我们只知道,我们在一起,我们找到的是快乐……

  可是在我8岁那年,父母因为要掉离到离这边很远很远的乡镇。我们不得不也跟着走,我记得哪天,他哭着送我走的,而我却一言不发…。他给了我一海螺。,我平静的拿过,他告诉我,把海螺放在耳边就能听到海的呼唤,他等我回来……我听完这话后,也哭了:”我会回来的…”车开了,他在背后奔跑着。我在车内挥舞着手…

  今年我回去了,可是我没有去找他,只是远远的忘着他。他变了,变得让人觉得刚强。不再是那个爱哭的小男孩,不知道他是否还记得我说过我会回来,他说过要我一定要回来。。可是如今的这些都已经不重要了。我相信如今的这些已经成为我们心中彼此的期待,何必打破海螺里的平静,或许,这样,在彼此的心目中都是如此的完美…

  我漫步在海边,可是如今的我怎么堆也堆不起沙雕。。我蹲在海边哭了。。海水不知趣的泼在我的脸上,我站起来,看见了他…。。可是,我们就这样插身而过了,他只很平静的回过头来望了望我,皱了皱眉而已…我不知道他是想起我了,还是觉得一个傻姑娘在海边哭泣很奇怪…。

  我蹲在那里很久很久,静静的看着他捡起一个海螺,走了…海风吹呀吹,把我的记忆吹走了。如今的你是否也在想着我?

  我把小时候那单纯的感情装在海螺里抛入了大海,我们的起源在大海,结束也在大海,大海见证了曾经有两个两小无猜的孩子,在这别建他们的碉堡,曾在这边许诺会回来。。我回来了,只不过我们擦身而过而已。。

  你知道吗?!我信守了承诺。。我有回来,不知你知道不知道。

  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问