动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.C/C++数组名与指针区别深入探索.
.C语言程序设计(第6章 指针)01.
.自己对三层架构理论的理解.
.灵活运用c语言实现高级功能.
.C语言函数说明与返回值.
.Turbo C下的寄存器变量.
.C语言五子棋算法.
.如何单步执行外部程序.
.八皇后问题的求解.
.在CB中如何自定义属性[propertie.
.gSOAP中内存的使用.
.用标准C实现shell功能.
.makefile写法.
.Visual FoxPro 9.0 的报表设计器.
.深度探索C++对象模型(1).
.C++的底层机制.
.理解 C++ Builder&nbs.
.C趣味编程百例(32).
.用PcommPro开发串行通信程序.
.C/C++中利用空指针(NULL),提高程.

程序配置信息的保存

发表日期:2008-3-8 |


    在我们编写的每一个程序中,我们都要保存一些有用的信息,如何保存这些信息呢?比较常用的有三种方法,一种是使用注册表,一种是使用Ini文件,还有就是使用文件。采用那种方法保存配置信息,不同的人可能有不同的习惯,这三种方法那种最适合你的程序呢,究竟那个最方便呢?

一、使用注册表
    在BCB中有个TRegistry,它提供了方便的注册表操作,它有几个重要的属性和方法。如下:
    __property HKEY RootKey = {read=FRootKey, write=SetRootKey, nodefault};
    这个属性用来设置和取得当前的根键。在默认情况下它的值是HKEY_CURRENT_USER。
    这个属性是我们经常用到的。
    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(const AnsiString Name);
    这个方法判定当前键下是否存在指定的数据项。
    AnsiString __fastcall ReadString(const AnsiString Name);
    这个方法从当前键下指定的数据项读取一个字符串。
    void __fastcall WriteString(const AnsiString Name, const AnsiString Value);
    这个方法向当前键下指定的数据项写入一个字符串。类似的函数还有ReadInteger,WriteInteger,ReadBool,WriteBool等方法,这里就不一一列举了,请大家看一下在线帮助就可以了,下面我举一个使用注册表保存和读取程序配置信息的例子来说明如何用注册表读取和保存程序的配置信息。
    下面这个例子从HKEY_LOCAL_MACHINE\\Software\\MyInfo键下读取配置信息,假如程序是第一次运行则建立这个键。(使用TRegistry类,需要包含Registry.hpp)
    #include <Registry.hpp>

    void __fastcall ReadConfig ()
    {
      TRegistry * reg = new TRegistry();
      reg->RootKey = HKEY_LOCAL_MACHINE;
      if ( reg->OpenKey ( "\\Software\\MyInfo", true  ) )
      {//打开HKEY_LOCAL_MACHINE\\Software\\MyInfo键假如不存在则创建
        if ( reg->ValueExists ( "DataPath" ) )
        {//判定是否存在DataPath这个数据项,存在则读取
          SysConfig.DataPath = reg->ReadString ( "DataPath" );
        }else{//假如不存在这个数据项则采用程序默认路径
          SysConfig.DataPath = DefaultPath;
        }
      }

      reg->CloseKey();//关闭打开的键。
      delete reg;
    }
    下面这个例子是保存信息到注册表,假如不存在这个键则创建并保存。
    void __fastcall SaveConfig ()
    {
      TRegistry * reg = new TRegistry();
      reg->RootKey = HKEY_LOCAL_MACHINE;
      if ( reg->OpenKey ( "\\Software\\MyInfo", true  ) )
      {//打开HKEY_LOCAL_MACHINE\\Software\\MyInfo键假如不存在则创建
        reg->WriteString ( "DataPath", SysConfig.DataPath );
      }
      reg->CloseKey();//关闭打开的键并保存信息
      delete reg;
    }
    这两个例子很简单,其它的一些读写方法也和读取和写入String差不多,大家可以试试。

    使用注册表要注重的问题。

        使用注册表保存配置信息是多数软件所采用的方法,用注册表的优点是用户轻易不能够取得和修改这些配置信息,能够有一定的安全性和隐蔽性,假如你采用二进制方式写入的话,用户将很难知道你保存的数据内容,这样可以使你的数据更安全它的缺点就是你要注重在Windows的不同版本下,注册表的结构是不同的,而且在NT和WIN2000下,假如权限不够有些键系统是不答应你访问的。再就是用户很讨厌软件在它的注册表里写
入一些东西。这也就是流行的绿色软件之说了。

二、使用INI配置文件

    在BCB中有个TIniFile类,它提供了对INI文件的操作,INI文件一种通用的配置文件格式它也象注册表一样分键和数据项,下面是一个INI配置文件的内容,它有一个键LastConfig,在这个键下有一个数据项DefaultDit,在数据项后面就是这个数据项的值。
  [LastConfig]
  DefaultDir=E:\xxx
  TIniFile类有几个常用的方法给大家介绍一下:
  __fastcall TIniFile(const AnsiString FileName) : Inifiles::TCustomIniFile(FileName) { }
  这个方法创建一个INI对象,假如FileName指定的文件名不存在则自动生成此文件,FileName可以用全路径,指定INI文件的地点,假如只有文件名没有路径,这个函数将到Windows系统路径下去打开或创建。(WIN9X是Windows目录,NT和2000是WINNT目录)
  bool __fastcall SectionExists(const AnsiString Section);
  这个方法判定是否存在Section这个键。
  virtual AnsiString __fastcall ReadString(const AnsiString Section, const AnsiString Ident, const AnsiString Default);
  这个方法从INI文件中读取一个字符串,Section是指定的键,Ident是指定键下的数据项Default是假如这个项不存在的时候的默认值。
  virtual void __fastcall WriteString(const AnsiString Section, const AnsiString Ident, const AnsiString Value);
  这个方法是向INI文件中写入一个字符串,Senction是指定的键,Ident是指定的数据项,Value是要写入的数据。同TRegistry一样,TIniFile类还提供了读取整型、布尔型,二进制等数据类型的读写方法,大家看看联机帮助就可以了,用法基本一样。下面就那上面的INI文件为例来说明一下如何有INI文件来保存配置信息和如何从INI文件中读取数据。

  下面的例子是如何从一个INI文件中读取配置,此配置文件保存在应用程序的目录下,假如没有配置,则取程序所在路径为默认值。


  #include <inifiles.hpp>

  void __fastcall ReadConfig ()
  {
   //读取配置,
    TIniFile * regKey;
    AnsiString ExePath = ExtractFileName( ParamStr ( 0 ) );
    regKey = new TIniFile ( ExePath + "TrimTxt.ini");
    DefaultDir=regKey->ReadString("LastConfig","DefaultDir",ExePath );
    delete regKey;
  }

  下面的例子说明如何将信息写入INI文件

  void __fastcall SaveConfig ()
  {
    TIniFile * regKey;
    AnsiString ExePath = ExtractFileName( ParamStr ( 0 ) );
    regKey = new TIniFile ( ExePath + "TrimTxt.ini");
    regKey->WriteString ( "LastConfig", "DefaultDir" , DefaultDir );
    de
上一篇:程序设计语言 人气:265
下一篇:初级 Windows API C++语言版 编程(3) 人气:495
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-14 25175学生成绩管理系统 v2.88
2008-10-14 冰雪CMS v2.0 bulid 081013
2008-10-14 Modoer多功能点评系统 v1.1 Beta
2008-10-14 乐风CMS乐风影视版 v2008.10.13
2008-10-14 FeitecCMS 40T免费资源网整站源码
2008-10-14 Asoft签到管理系统 v3.0 Pack2
2008-10-14 金博人才招聘求职网黄金版 v4.2
2008-10-14 游戏推广无限制版本
2008-10-14 AmEav WebSite 业网站管理系统 英
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成