我正在寻找一种创建不涉及IniFile的配置文件的方法。
我在Delphi应用程序中有2个编辑框,第一个在editbox1中命名为username1,第二个在editbox2中命名为密码。
我想创建一个配置文件,如下图所示,作为示例配置:
superuser是输入editbox1的用户名1
passw123是editbox2的密码条目
这里我不想涉及IniFile,我想制作一个配置文件,如下图所示,带有带有记事本应用程序的txt只能制作一个内衬的配置文件
superuser passw123
答案 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表,使用记事本不容易阅读其内容。