




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在我们编写的每一个程序中,我们都要保存一些有用的信息,如何保存这些信息 呢?比较常用的有三种方法,一种是使用注册表,一种是使用ini文件,还有就 是使用文件。采用那种方法保存配置信息,不同的人可能有不同的习惯,这三种 方法那种最适合你的程序呢,究竟那个最方便呢?一、使用注册表在bcb屮有个tregistry,它提供了方便的注册表操作,它有几个重要的属性 和方法。如下:_property hkey rootkey = read=frootkey, write=setrootkey, nodefault;这个属性用来设置和取得当両的根键。在默认情况卜它的值是hkey_current_user。这个
2、属性是我们常常用到的。bool _fastcall openkey(const ansistring key, bool cancreate);这个方法用來打开一个键,bool cancreate是表示如杲这个键不存在则是否创 建这个键,true是创建。如果打开成功返回true。void _fastcall closekey(void);这个方法关闭当前打开的键,当你完成注册表的修改后,应该调用此方法來保 存您的修改。bool _fastcall keyexists(const ansistring key);这个方法判断一个键是否存在。bool _fastcall valueexists(c
3、onst ansistring name);这个方法判断当前键下是否存在指定的数据项。ansistring _fastcall readstring(const ansistring name);这个方法从当前键下指定的数据项读取一个字符串。void fastcall writestring(const ansistring name, const ansistring value);这个方法向当前键卜指定的数据项写入一个字符串。类似的函数还有 readinteger, writeinteger, readbooh writebool 等方法,这里就不-列举了,请大家看一下在线帮助就可以了,下
4、而我举个使用注册农保存和读取程序配置 信息的例了來说明如何用注册表读取和保存程序的配置信息。卜面这个例了从hkey_local_machinesoftwawmyinfo键卜读取配置信 息,如果程序是第一次运行则建立这个键。(使用tregistry类,需要包含 registry.hpp)#include <registry.hpp>void _fastcall readconfig ()tregistry * reg = new tregistryo;reg->rootkey = hkey_local_machin eif ( reg->openkey (hsoftwar
5、emyinfom, true )/打开 hkey_local_machinesoftwaremyinfo 键如果不存在则创建if ( reg->valueexists (ndatapath")判断是否存在datapath这个数据项,存在则读取sysconfig.datapath = reg->readstring ("datapath” );else/如果不存在这个数据项则采用程序默认路径sysconfig.datapath = defaultpath;reg->closekey();关闭打开的键。delete reg;卜面这个例了是保存信息到注册表,如杲
6、不存在这个键则创建并保存。void _fastcall saveconfig ()tregistry * reg = new tregistryo;reg->rootkey = hkey_local_machin eif ( reg->openkey (hsoftwaremyinfom, true )/打开 hkey_local_machinesoftwaremyinfo 键如果不存在则创建reg->writestring ("datapath", sysconfig.datapath );reg->closekey();关闭打开的键并保存信息del
7、ete reg;这两个例了很简单,其它的一些读写方法也和读取和写入string差不多,大家 可以试试。使用注册表要注意的问题。使用注册表保存配置信息是多数软件所采用的方法,用注册表的优点是用户 轻易不能够取得和修改这些配置信息,能够有一定的安全性和隐蔽性,如果你采 用二进制方式写入的话,用户将很难知道你保存的数据内容,这样可以使你的数 据更安全它的缺点就是你要注意在windows的不同版木匚 注册表的结构是不 同的,而且在nt和win2000下,如果权限不够有些键系统是不允许你访问的。 再就是用户很讨厌软件在它的注册表里写 入一些东西。这也就是流行的绿色软件z说了。二、使用ini配置文件在bc
8、b中有个tinifile类,它提供了对ini文件的操作,ini文件一种通用的 配置文件格式它也象注册表一样分键和数据项,卜面是一个ini配置文件的内容, 它有-个键lastconfig,在这个键下有-个数据项defaultdit,在数据项后面就 是这个数据项的值。| lastconfigdefaultdir=e:xxxtinifile类有几个常用的方法给大家介绍一下:_fastcall tinifile(const ansistring filename) : inifiles:tcustominifile(filename) 这个方法创建一个ini对象,如杲filename指定的文件名不存在
9、则口动生成此 文件,filename可以用全路径,指定ini文件的地点,如果只有文件名没有路径, 这个函数将到windows系统路径卜去打开或创建。(win9x是windows h录, nt和2000是winnt目录)bool _fastcall sectionexists(const ansistring section);这个方法判断是否存在section这个键。virtual ansistring _fastcall readstring(const ansistring section, const ansistring ident, const ansistring default)
10、;这个方法从ini文件屮读取一个字符串,section是指定的键,ident是指定键下 的数据项default是如果这个项不存在的时候的默认值。virtual void _fastcall writestring(const ansistring section, const ansistring ident, const ansistring value);这个方法是向ini文件屮写入一个字符串,senction是指定的键,ident是指定 的数据项,value是要写入的数据。同tregistry -样,tinifile类述提供了读取 整型、布尔型,二进制等数据类型的读行方法,大家看看联机帮
11、助就可以了,用 法基木一样。卜血就那上血的ini文件为例來说明一下如何有ini文件來保存配 置信息和如何从ini文件屮读取数据。下面的例了是如何从一个ini文件中读取配置,此配置文件保存在应用程序的目 录下,如果没有配置,则取程序所在路径为默认值。#include <inifiles.hpp>void _fastcall readconfig ()读取配置,tinifile * regkey;ansistring exepath = extractfilename( param str ( 0 );regkey = new tinifile ( exepath + ntrimtxt
12、.iniu);defaultdir=regkey->readstring(,'lastconfig,',defaultdirn,exepath);delete regkey;下面的例子说明如何将信息写入ini文件void _fastcall saveconfig ()tinifile * regkey;ansistring exepath = extractfilename( param str ( 0 );regkey = new tinifile ( exepath + "trimtxt.ini");regkey->writestring (
13、"lastconfig", "defaultdir", defaultdir );delete regkey;使用ini文件保存配置信息是很方便的,它最大的优点就是用户可以手工去就 改它,它通常用来保存一些不是至关重要的数据。它的缺点就是不适合保存结构 比较复杂的数据,而且文件容易被破坏。三、使用文件使用文件来保存程序的配置,大概是现在不常用到的方法。因为对文件的操作 是让很多初学头疼的事,但通过适当的方法,用文件保存数据还是非常方便和灵 活的。在bcb中使用文件常用的有如下几种方式。a、用fopen,fwrite比较传统,但比较灵活。b、使用strea
14、m,如filestream和memory stream,优点是比较方便。使用文件保存数据我常用的是通过定义一个结构來进行,操作,如以下的结构struct charusern ame 10;用户名charpassw ord 16;用户密码int level241; 用户权限 userinfo;这个结构用來保存程序使用者的一些信息,(我随便定义的不一定合理,只是 作个例了)如果用注册表和ini文件来保存都很麻烦,可是如果用文件就很简单 了。下面我分别用a、b两种方式来保存和读取。下面的这两个例了用传统的文件读写方式來读写配置文件#include <stdio.h>bool _fastc
15、all readconfigo读取配置文件file * ptr;ansistring filename=extractfilename(paramstr(o)+nuserinfo.dath;ptr = fopen (filename.c_str(), "rb");if ( ptr = null )showmessage (”文件打开失败! ”);return false;fseek (ptr, 0l, seek_end );定位到文件尾if ( ftell ( ptr ) != sizeof ( userinfo )判断文件是否被破坏。showmessage ( ”配置文件
16、被破坏! ”);fclose (ptr);reutrn false;fseek (ptr, 0l, seek_set );定位到文件头fread ( &userlnfo, sizeof(userinfo), 1 ,ptr);/读取内容到结构。fclose (ptr);return true;void _fastcall saveconfigofile * ptr;ansistring filename=extractfilename(paramstr(o)+nuserinfo.dath;ptr = fopen ( filename.c_str(), "wb");if
17、 ( ptr = null )showmessage (”文件打开失败! ”);return false;fwrite (&userinfo,sizeof(userinfo), 1, ptr);读取内容到结构。fclose (ptr);这样就完成了一个配置文件的读身。下面在用stream来处理这个文件。bool _fastcall readconfig ()用流来读取,我用内存流是因为我的个人习惯,其实用文件流也是一样的。tmemorystream * readstream = new tmemorystream ();ansistring filename = extractfile
18、name(paramstr(0)+"userlnfo.dat,'readstream>loadfromfile ( filename );if(readstream>size!=sizeof( userinfo )showmessage (”配置文件被破坏! ”);delete readstream;reutrn false;readstream->seek ( 0, sofrombeginning );定位到文件头readstream->readbuffer ( &userinfo, sizeof ( userinfo );读取文件内容到结构delete readstream;void _fastcall saveconfig ()tmemorystream * readstream = new tmemorystream ();ansistring filename=extractfilename(paramstr(0)+"userinfo.dath;readstream->writebuffer(&userlnfo, sizeof ( userinfo );将结构写入流readstre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康社会课课件视频下载
- 张家界市重点中学2025届物理高二第二学期期末教学质量检测试题含解析
- 鼻窥镜项目可行性研究报告
- 葛洲坝集团退休管理办法
- 虹口区冷冻仓库管理办法
- 融资性担保管理暂行办法
- 街道志愿服务站管理办法
- 裕安区健身设施管理办法
- 西安市雨水泵站管理办法
- 证券经纪业务管理办法
- 律所-人才激励方案(3篇)
- 2025至2030 中国热成型钢(PHS)行业现状调查与前景策略研究报告
- 加油站安全生产隐患排查治理制度
- 红酒礼仪服务培训课件
- 千川投手培训课件
- 佛山市2024-2025高一下期末-物理试卷
- 浙江省杭州市2024-2025学年高二下学期6月期末教学质量检测物理试题(含答案)
- 企业社会责任管理制度
- 建设工程(更新)融资投资立项项目可行性研究报告(非常详细)
- 变电站集控系统管理制度
- 人防车位编排方案(3篇)
评论
0/150
提交评论