zoukankan      html  css  js  c++  java
  • 一个操作配置文件(Reg,ini,XML)的类

    自己为了使用方便写的

    //***************************************************************
    //说明:设置信息保存类,支持Reg、XML、Ini
    //作者:Garfield
    //创建时间:2004-11-18
    //最后修改时间:2004-11-18
    //修改历史:
    //1.调试通过Reg,Ini,XML有问题
    //XMLCreate(nil)或Create(FileName)都有问题,只有Create(Application)时才可以
    //并且设置值时有问题,对XML不熟悉
    //
    //****************************************************************
    unit Config;

    interface

    uses
      SysUtils, Windows, Messages, Classes, Graphics, Controls,
      Forms, Dialogs,XMLDoc,registry,IniFiles;

    type
      TConfig = class(TObject)
      private
        FConfigType: Integer;
        FFileName: string;
        FSession: string;
      public
        constructor Create(Session,FileName:String); virtual;
        destructor Destroy; virtual; abstract;
        function ReadSetting(Key,Default:ShortString): string; virtual; abstract;
        procedure WriteSetting(Key,Value:ShortString); virtual; abstract;
      published
        property ConfigType: Integer read FConfigType write FConfigType;
      end;
      TXMLConfig = class(TConfig)
      private
        FXMLDoc: TXMLDocument;
      public
        constructor Create(Session,FileName:String); override;
        destructor Destroy; override;
        function ReadSetting(Key,Default:ShortString): string; override;
        procedure WriteSetting(Key,Value:ShortString); override;
      end;
      TRegConfig = class(TConfig)
      private
        FReg: TRegistry;
      public
        constructor Create(Session,FileName:String); override;
        destructor Destroy; override;
        function ReadSetting(Key,Default:ShortString): string; override;
        procedure WriteSetting(Key,Value:ShortString); override;
      end;
      TIniConfig = class(TConfig)
      private
        FIniFile: TIniFile;
      public
        constructor Create(Session,FileName:String); override;
        destructor Destroy; override;
        function ReadSetting(Key,Default:ShortString): string; override;
        procedure WriteSetting(Key,Value:ShortString); override;
      end;

    implementation

    {
    *********************************** TConfig ************************************
    }
    constructor TConfig.Create(Session,FileName:String);
    begin
      FSession:=Session;
      FFileName:=FileName;
    end;

    {
    ********************************** TXMLConfig **********************************
    }
    constructor TXMLConfig.Create(Session,FileName:String);
    begin
      inherited;
      //如果不存在XML文件
      if not FileExists(FFileName) then
      begin
        //+++++++++++++++++++++++++++++++++++++
        with (TXMLDocument.Create(Application)) do
        begin
          XML.Add('<?xml version="1.0" standalone="yes"?>');
          XML.Add('<'+FSession+'>');
          XML.Add('Carfield');
          XML.Add('</'+FSession+'>');
          Active := true;
          SaveToFile(FFileName);
          Free;
        end;
      //+++++++++++++++++++++++++++++++++++++
      end;
      FXMLDoc:=TXMLDocument.create(Application);
      FXMLDoc.FileName:=FFileName;
      FXMLDoc.Active:=True;
    end;

    destructor TXMLConfig.Destroy;
    begin
      FXMLDoc.Active:=False;
      FXMLDoc.Free;
    end;

    function TXMLConfig.ReadSetting(Key,Default:ShortString): string;
    begin
      try
         //result:=FXMLDoc.DocumentElement.ChildNodes[FSession].ChildNodes[Key].Text;
         result:=FXMLDoc.DocumentElement.ChildNodes[Key].Text;
      except
         Result:=Default;
      end;
    end;

    procedure TXMLConfig.WriteSetting(Key,Value:ShortString);
    begin
      //FXMLDoc.DocumentElement.ChildNodes[FSession].ChildNodes[Key].Text:=Value;
      FXMLDoc.DocumentElement.ChildNodes[Key].Text:=Value
    end;

    {
    ********************************** TRegConfig **********************************
    }
    constructor TRegConfig.Create(Session,FileName:String);
    begin
      inherited;
      FReg:=TRegistry.Create ;
    end;

    destructor TRegConfig.Destroy;
    begin
      FReg.Free;
    end;

    function TRegConfig.ReadSetting(Key,Default:ShortString): string;
    var
      v: string;
    begin
      try
      //    FReg.RootKey :=HKEY_CURRENT_USER;
        if FReg.OpenKey(FSession,False) then
        begin
          FReg.OpenKey(FSession,False);
          v:=FReg.ReadString(Key);
          if v='' then  Result:=Default else Result:=v;
        end
      finally
          FReg.CloseKey ;
      end;
    end;

    procedure TRegConfig.WriteSetting(Key,Value:ShortString);
    begin
      try
      //    Reg.RootKey :=HKEY_CURRENT_USER;
         if FReg.OpenKey(FSession,True) then
         begin
           FReg.OpenKey(FSession,False);
           FReg.WriteString(Key,Value);
         end
       finally
           FReg.CloseKey ;
       end;
    end;

    {
    ********************************** TIniConfig **********************************
    }
    constructor TIniConfig.Create(Session,FileName:String);
    begin
      inherited;
      FIniFile:=TIniFile.create(FFileName);
    end;

    destructor TIniConfig.Destroy;
    begin
      FIniFile.Free;
    end;

    function TIniConfig.ReadSetting(Key,Default:ShortString): string;
    begin
      try
         result:=FiniFile.ReadString(FSession,Key,Default);
      except
         Result:=Default;
      end;
    end;

    procedure TIniConfig.WriteSetting(Key,Value:ShortString);
    begin
      try
         FiniFile.WriteString(FSession,Key,Value);
      except
      end;
    end;

    end.

  • 相关阅读:
    heapq of python
    array of python
    Unittest of Python
    事件驱动型工作流 vs 引擎型工作流
    airflow
    WPF 调试触发器
    WPF 使用Popup和TreeView实现树状下拉框
    Oracle : ORA 00933: SQL command not properly ended
    PostgreSQL && PostGIS
    基于ArcGIS开发3D立方体空间关系判断
  • 原文地址:https://www.cnblogs.com/GarfieldTom/p/1427181.html
Copyright © 2011-2022 走看看