当我在inno-setup代码中创建INI部分时,即使密钥和部分存在,它也始终创建新密钥。我使用的代码如下。
[INI]
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key1"; String: {code:Getkey1};
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key2"; String: {code:Getkey2};
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key3"; String: {code:Getkey3};
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key4"; String: {code:Getkey4};
此INI文件最初看起来像这样
[MAIN]
key1=value
key2=value
key3=value
key4=value
并在安装后成为(请注意此ini位于已安装的文件中)
[MAIN]
key1=value1
key2=value2
key3=value3
key4=value4
[MAIN]
key1=value1
key2=value2
key3=value3
key4=value4
所以我的问题是如何让文件覆盖初始值而不是创建新的。
答案 0 :(得分:1)
您的代码是正确的。
问题是99%,@RobeN has suggested in his comment。
当INI文件具有UTF-8 BOM时,我确实可以重现该问题。
由于INI文件不支持UTF-8编码,因此INI文件解析器将BOM误解为第一行的一部分:
<bom>[MAIN]
因此它不会将第一行视为一个部分开始,因此它不会在文件中找到任何[MAIN]
部分并创建一个新部分。
结论:确保INI文件中没有BOM。例如,如果在Windows记事本中创建INI文件,请使用 Ansi 编码保存文件。