如何创建一个不涉及IniFile的配置文件?

时间:2014-03-18 07:41:10

标签: delphi delphi-7 pascal ini

我正在寻找一种创建不涉及IniFile的配置文件的方法。

我在Delphi应用程序中有2个编辑框,第一个在editbox1中命名为username1,第二个在editbox2中命名为密码。

我想创建一个配置文件,如下图所示,作为示例配置:

superuser是输入editbox1的用户名1

passw123是editbox2的密码条目

这里我不想涉及IniFile,我想制作一个配置文件,如下图所示,带有带有记事本应用程序的txt只能制作一个内衬的配置文件

superuser
passw123

4 个答案:

答案 0 :(得分:2)

如果您的文件包含不同行的配置信息:

superuser
password123

您可以使用TStringList来读取它们:

procedure GetConfig(const AFileName: string; out AValue1, AValue2: string);
var
  list : TStringList;
begin
  list := TStringList.Create;
  try
    list.LoadFromFile(AFileName);
    if list.Count<2 then begin
      // ERROR
    end;
    AValue1 := list[0];
    AValue2 := list[1];
  finally
    FreeAndNil(list);
  end;
end;

我认为你可以自己弄清楚写作部分。

您可以添加任何您喜欢的错误处理。

答案 1 :(得分:2)

您正在考虑在您的脑海中混合各层,因此在您的应用程序中。

你应该想得更抽象。 UI不需要知道信息的存储位置和方式,UI只需要知道如何获取信息。

TMyConfigData = class abstract
protected
  function GetUsername : string; virtual; abstract;
  function GetPassword : string; virtual; abstract;
public
  property Username : string read GetUsername;
  property Password : string read GetPassword;
end;

具体类(基于文本文件)看起来像这样

TMyTextConfigData = class( TMyConfigData )
private
  FFilename : string;
  FData : TStringList;
protected
  function GetUsername : string; override;
  function GetPassword : string; override;
public
  constructor Create( const Filename : string );
  destructor Destroy; override;
end;

constructor TMyTextConfigData.Create( const Filename : string );
begin
  inherited Create;
  FFilename := Filename;
  FData := TStringList.Create;
  FData.ReadFromFile( FFilename );
end;

destructor Destroy;
begin
  FData.Free;
  inherited;
end;

function TMyTextConfigFile.GetUsername : string;
begin
  Result := FData[0]; // first line
end;

function TMyTextConfigFile.GetPassword : string;
begin
  Result := FData[1]; // second line
end;

一旦您决定使用INI-File或XML-File或注册表甚至数据库,您只需为此构建一个新的具体类。您的应用程序(UI)只知道TMyConfigData的实例,不需要更改。

答案 2 :(得分:1)

有点难以理解你究竟在问什么,但如果你问如何保存和加载包含用户名和密码的配置到一个简单的文本文件,你可以使用这个代码:

TYPE
  TConfiguration = RECORD
                     UserName,Password : STRING
                   END;

FUNCTION ReadConfig(CONST FileName : STRING) : TConfiguration;
  VAR
    TXT : TextFile;

  BEGIN
    AssignFile(TXT,FileName); RESET(TXT);
    TRY
      READLN(TXT,Result.UserName);
      READLN(TXT,Result.Password)
    FINALLY
      CloseFile(TXT)
    END
  END;

PROCEDURE WriteConfig(CONST FileName : STRING ; CONST Config : TConfiguration);
  VAR
    TXT : TextFile;

  BEGIN
    AssignFile(TXT,FileName); REWRITE(TXT);
    TRY
      WRITELN(TXT,Config.UserName);
      WRITELN(TXT,Config.Password)
    FINALLY
      CloseFile(TXT)
    END
  END;

保存时使用它:

VAR Config : TConfiguration;
...
Config.UserName:=editbox1.Text;
Config.Password:=editbox2.Text;
WriteConfig(FileName,Config);

并像这样重新加载:

VAR Config : TConfiguraion;
...
Config:=ReadConfiguration(FileName);
editbox1.Text:=Config.UserName;
editbox2.Text:=Config.Password;

如果这不是您想要的,那么您必须详细说明......

答案 3 :(得分:0)

我在那里看到了密码。可能是ini文件你的意思是文字。 您可以使用TRegistry在Windows注册表中的某处隐藏您的配置, 或者ClientDataSet表,使用记事本不容易阅读其内容。