无法获取ini文件的值

3

我会尝试从一个ini文件中获取一个值。该ini文件为:

[Database]
User=root
Pssword=lalalala
Server=localhost
Name=Prueba

我的代码读取过程如下:

procedure testManejoIniFile();
var
  iniFile: TIniFile;
  user: String;
begin
  {Abro el archivo ini}
  iniFile := TIniFile.Create('config.ini');
  user := iniFile.ReadString('Database','User','Algo anda mal...');
  iniFile.Free;
  WriteLn(user);
end;

调用该过程的 CLI 程序为:

WriteLn('El usuario para la base de datos es:');
testManejoIniFile();
ReadLn;

命令行界面(cli)总是返回:

数据库用户为:
出现了一些问题...

有任何想法吗?


配置文件config.ini与程序的关系是什么? - Glenn1234
1
TIniFile.Create会在Windows文件夹中查找ini文件...您是将其放在那里了吗?否则,您可以尝试使用TINIFile.Create(ExtractFilePath(Application.EXEName) + 'config.ini'); - GregHNZ
1个回答

9
您没有明确说明TIniFile.Create应该在哪里查找config.ini文件,因此它默认在Windows目录中查找,但未能找到,并返回您指定的默认值。您需要指定config.ini文件的位置。如果它与应用程序在同一个文件夹中,您可以使用ExtractFilePathParamStr(0)Application.ExeName获取路径,如下所示(我添加了try..finally以防异常,并将WriteLn移动到仅在ReadString成功时调用):
procedure testManejoIniFile();
var
  iniFile: TIniFile;
  user: String;
  Path: string;
begin
  {Abro el archivo ini}
  Path := ExtractFilePath(ParamStr(0)); // Or Application.ExeName
  iniFile := TIniFile.Create(Path + 'config.ini');
  try
    user := iniFile.ReadString('Database','User','Algo anda mal...');
    WriteLn(user);
  finally
    iniFile.Free;
  end;
end;

肯恩说得对。我只想补充一点,您应始终指定文件的完整路径,因为诸如常见对话框(打开和保存)之类的东西会更改应用程序的当前目录。 - MikeD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接