【发布时间】:2011-10-24 01:09:15
【问题描述】:
当一个ini文件包含一个只有一个键的部分时(如MySection1 in
[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。
【问题讨论】:
-
你使用的是
TIniFile还是TMemIniFile? -
澄清一下,
SectionExists返回false如果部分“存在”但其中没有(即 0)键? -
@Andreas:是的。这个名字是次优的。 :-)
-
TMemIniFile的表现是否更好? -
@David:不。TMemIniFile 在部分之间添加空行(看起来不错),但仍然留下空部分。
标签: delphi delphi-2007 ini