国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

程序配置信息的保存

2019-11-17 05:37:44
字體:
供稿:網(wǎng)友
    在我們編寫的每一個(gè)程序中,我們都要保存一些有用的信息,如何保存這些信息呢?比較常用的有三種方法,一種是使用注冊表,一種是使用Ini文件,還有就是使用文件。采用那種方法保存配置信息,不同的人可能有不同的習(xí)慣,這三種方法那種最適合你的程序呢,究竟那個(gè)最方便呢?

一、使用注冊表
    在BCB中有個(gè)TRegistry,它提供了方便的注冊表操作,它有幾個(gè)重要的屬性和方法。如下:
    __PRoperty HKEY RootKey = {read=FRootKey, write=SetRootKey, nodefault};
    這個(gè)屬性用來設(shè)置和取得當(dāng)前的根鍵。在默認(rèn)情況下它的值是HKEY_CURRENT_USER。
    這個(gè)屬性是我們經(jīng)常用到的。
    bool __fastcall OpenKey(const AnsiString Key, bool CanCreate);
    這個(gè)方法用來打開一個(gè)鍵,bool CanCreate是表示假如這個(gè)鍵不存在則是否創(chuàng)建這個(gè)鍵,true是創(chuàng)建。假如打開成功返回true。
    void __fastcall CloseKey(void);
    這個(gè)方法關(guān)閉當(dāng)前打開的鍵,當(dāng)你完成注冊表的修改后,應(yīng)該調(diào)用此方法來保存您的修改。
    bool __fastcall KeyExists(const AnsiString Key);
    這個(gè)方法判定一個(gè)鍵是否存在。
    bool __fastcall ValueExists(const AnsiString Name);
    這個(gè)方法判定當(dāng)前鍵下是否存在指定的數(shù)據(jù)項(xiàng)。
    AnsiString __fastcall ReadString(const AnsiString Name);
    這個(gè)方法從當(dāng)前鍵下指定的數(shù)據(jù)項(xiàng)讀取一個(gè)字符串。
    void __fastcall WriteString(const AnsiString Name, const AnsiString Value);
    這個(gè)方法向當(dāng)前鍵下指定的數(shù)據(jù)項(xiàng)寫入一個(gè)字符串。類似的函數(shù)還有ReadInteger,WriteInteger,ReadBool,WriteBool等方法,這里就不一一列舉了,請大家看一下在線幫助就可以了,下面我舉一個(gè)使用注冊表保存和讀取程序配置信息的例子來說明如何用注冊表讀取和保存程序的配置信息。
    下面這個(gè)例子從HKEY_LOCAL_MACHINE//Software//MyInfo鍵下讀取配置信息,假如程序是第一次運(yùn)行則建立這個(gè)鍵。(使用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鍵假如不存在則創(chuàng)建
        if ( reg->ValueExists ( "DataPath" ) )
        {//判定是否存在DataPath這個(gè)數(shù)據(jù)項(xiàng),存在則讀取
          SysConfig.DataPath = reg->ReadString ( "DataPath" );
        }else{//假如不存在這個(gè)數(shù)據(jù)項(xiàng)則采用程序默認(rèn)路徑
          SysConfig.DataPath = DefaultPath;
        }
      }

      reg->CloseKey();//關(guān)閉打開的鍵。
      delete reg;
    }
    下面這個(gè)例子是保存信息到注冊表,假如不存在這個(gè)鍵則創(chuàng)建并保存。
    void __fastcall SaveConfig ()
    {
      TRegistry * reg = new TRegistry();
      reg->RootKey = HKEY_LOCAL_MACHINE;
      if ( reg->OpenKey ( "//Software//MyInfo", true  ) )
      {//打開HKEY_LOCAL_MACHINE//Software//MyInfo鍵假如不存在則創(chuàng)建
        reg->WriteString ( "DataPath", SysConfig.DataPath );
      }
      reg->CloseKey();//關(guān)閉打開的鍵并保存信息
      delete reg;
    }
    這兩個(gè)例子很簡單,其它的一些讀寫方法也和讀取和寫入String差不多,大家可以試試。

    使用注冊表要注重的問題。

        使用注冊表保存配置信息是多數(shù)軟件所采用的方法,用注冊表的優(yōu)點(diǎn)是用戶輕易不能夠取得和修改這些配置信息,能夠有一定的安全性和隱蔽性,假如你采用二進(jìn)制方式寫入的話,用戶將很難知道你保存的數(shù)據(jù)內(nèi)容,這樣可以使你的數(shù)據(jù)更安全它的缺點(diǎn)就是你要注重在Windows的不同版本下,注冊表的結(jié)構(gòu)是不同的,而且在NT和WIN2000下,假如權(quán)限不夠有些鍵系統(tǒng)是不答應(yīng)你訪問的。再就是用戶很討厭軟件在它的注冊表里寫
入一些東西。這也就是流行的綠色軟件之說了。

二、使用INI配置文件

    在BCB中有個(gè)TIniFile類,它提供了對INI文件的操作,INI文件一種通用的配置文件格式它也象注冊表一樣分鍵和數(shù)據(jù)項(xiàng),下面是一個(gè)INI配置文件的內(nèi)容,它有一個(gè)鍵LastConfig,在這個(gè)鍵下有一個(gè)數(shù)據(jù)項(xiàng)DefaultDit,在數(shù)據(jù)項(xiàng)后面就是這個(gè)數(shù)據(jù)項(xiàng)的值。
  [LastConfig]
  DefaultDir=E:/xxx
  TIniFile類有幾個(gè)常用的方法給大家介紹一下:
  __fastcall TIniFile(const AnsiString FileName) : Inifiles::TCustomIniFile(FileName) { }
  這個(gè)方法創(chuàng)建一個(gè)INI對象,假如FileName指定的文件名不存在則自動(dòng)生成此文件,F(xiàn)ileName可以用全路徑,指定INI文件的地點(diǎn),假如只有文件名沒有路徑,這個(gè)函數(shù)將到Windows系統(tǒng)路徑下去打開或創(chuàng)建。(WIN9X是Windows目錄,NT和2000是WINNT目錄)
  bool __fastcall SectionExists(const AnsiString Section);
  這個(gè)方法判定是否存在Section這個(gè)鍵。
  virtual AnsiString __fastcall ReadString(const AnsiString Section, const AnsiString Ident, const AnsiString Default);
  這個(gè)方法從INI文件中讀取一個(gè)字符串,Section是指定的鍵,Ident是指定鍵下的數(shù)據(jù)項(xiàng)Default是假如這個(gè)項(xiàng)不存在的時(shí)候的默認(rèn)值。
  virtual void __fastcall WriteString(const AnsiString Section, const AnsiString Ident, const AnsiString Value);
  這個(gè)方法是向INI文件中寫入一個(gè)字符串,Senction是指定的鍵,Ident是指定的數(shù)據(jù)項(xiàng),Value是要寫入的數(shù)據(jù)。同TRegistry一樣,TIniFile類還提供了讀取整型、布爾型,二進(jìn)制等數(shù)據(jù)類型的讀寫方法,大家看看聯(lián)機(jī)幫助就可以了,用法基本一樣。下面就那上面的INI文件為例來說明一下如何有INI文件來保存配置信息和如何從INI文件中讀取數(shù)據(jù)。

  下面的例子是如何從一個(gè)INI文件中讀取配置,此配置文件保存在應(yīng)用程序的目錄下,假如沒有配置,則取程序所在路徑為默認(rèn)值。


  #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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娄烦县| 海安县| 沁水县| 温宿县| 隆昌县| 从化市| 沾益县| 济源市| 永登县| 上饶市| 攀枝花市| 张家口市| 邳州市| 韶关市| 辽阳县| 临夏县| 永丰县| 车致| 那曲县| 平果县| 彭泽县| 体育| 延津县| 沙河市| 贵港市| 新竹市| 康平县| 惠州市| 桃源县| 红原县| 思南县| 彭山县| 武城县| 松溪县| 新和县| 土默特左旗| 共和县| 满城县| 建宁县| 谷城县| 宽城|