Ini文件:DeleteKey留空部分

时间:2011-08-10 12:15:58

标签: 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

2 个答案:

答案 0 :(得分:4)

我不认为有“自动方式使Windows或VCL这样做”。我认为原因是“API”不知道您不打算再使用该部分(即,如果API删除最后一个密钥后会删除该部分,有人会抱怨这样做效率低,因为他们打算这样做稍后向该部分添加密钥,因此必须重新创建该部分。此外,有人可能会争辩说,空部分的存在也会传递信息,因此在自动删除的情况下信息会丢失。

答案 1 :(得分:1)

我不相信TIniFileTMemIniFile会以您想要的方式运作。因此,可能的解决方案是:

  1. 按照建议覆盖DeleteKey
  2. 覆盖UpdateFile并删除所有部分。