delphi - .ini 文件 : DeleteKey leaves empty section

标签 delphi delphi-2007 ini

当 ini 文件包含只有一个键的部分时(例如

中的 MySection1
[MySection1]
MyKey1=MyValue1
[MySection2]
...

) 对该键调用 DeleteKey 会留下一个空部分:

[MySection1]
[MySection2]
...

我希望该空白部分也能被删除。当然我可以这样称呼

if not ini.SectionExists('MySection1') then
  ini.EraseSection('MySection1');

每次调用DeleteKey(或者重写TExtIniFile.DeleteKey)之后,但我希望有一种自动方法可以让Windows或VCL做到这一点。你知道吗?

更新:我使用的 TIniFile 后代仅添加了一些额外的 Read*/Write* 方法。

更新:我的测试例程:

procedure TForm1.Button1Click(Sender: TObject);
var
  ini: TMyIniFile;
begin
  ini := TMyIniFile.Create(cIniFileName);
  try
    ini.WriteString('MySection1', 'MyKey1', 'MyValue1');
    ini.DeleteKey('MySection1', 'MyKey1');
  finally
    ini.Free;
  end;

  Show;
end;

procedure TForm1.Show;
begin
  if FileExists(cIniFileName) then
    Memo1.Lines.LoadFromFile(cIniFileName)
  else
    Memo1.Lines.Clear;
end;

TMyIniFile 可以是 TIniFile 的别名,也可以是 TMemIniFile 的后代,并带有调用 UpdateFile 的析构函数。

最佳答案

我不认为存在“自动方式让 Windows 或 VCL 做到这一点”。我相信原因是“API”不知道您不打算再使用该部分(即,如果 API 在您删除最后一个键后删除该部分,那么有人会提示这效率低下)稍后向该部分添加 key ,因此必须重新创建该部分)。另外,有人可能会说,空部分的存在也携带了信息,因此,如果自动删除,这些信息就会丢失。

关于delphi - .ini 文件 : DeleteKey leaves empty section,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7010617/

相关文章:

Delphi 快速报告 - 总页数

delphi - Delphi 2010 中的 SSH 上的 FTP (SFTP)

arrays - 如何将字符串元素数组连接成字符串

Delphi 搜索编辑组件

c++ - 写入 .ini 文件 - SimpleIni SetValue 没有做任何事情,尽管看起来成功了

delphi - Delphi Indy SMTPServer读取多部分消息

delphi - 如何调用 ASP web api 并从 delphi 2007 返回 JSON

php - upload_max_filesize 未反射(reflect)在 phpinfo() 中

c++ - 如何使用 POCO 库将更改写入 ".ini"文件?

delphi - 模拟键盘输入