Godot中ConfigFile多节数据无法更新问题求助
解决Godot中ConfigFile连续保存不同Section时数据被覆盖的问题
你的问题核心在于每次调用保存函数时,没有先加载已有的配置文件内容,直接新建ConfigFile实例并写入当前字段,导致原有数据被完全覆盖。
问题根源分析
看你的_set_data函数:
func _set_data(filename: String, section: String, field: String, value): var config_file = ConfigFile.new() config_file.set_value(section, field, value) config_file.save(filename)
每次创建全新的ConfigFile后,只设置了当前要保存的字段,然后直接覆盖写入文件——这相当于把之前整个配置文件的内容都清空,只留下这次的Section和字段,自然之前保存的其他Section数据就没了。
修复方案
修改_set_data函数,先加载已有文件内容,再更新指定字段,最后保存:
func _set_data(filename: String, section: String, field: String, value): var config_file = ConfigFile.new() // 先加载已有配置(文件不存在也不会报错,ConfigFile会保持为空) config_file.load(filename) // 更新指定字段的值 config_file.set_value(section, field, value) // 保存更新后的完整配置 config_file.save(filename)
验证修复效果
修改后再运行你的测试代码:
set_level(2) set_world(4) print(get_level()) print(get_world())
就能得到预期输出:
2 4
额外优化建议
如果你的配置读写操作比较频繁,可以考虑缓存ConfigFile实例,不用每次都创建新实例和执行文件IO操作,提升性能:
# 类成员变量,缓存ConfigFile实例 var _cached_config: ConfigFile = null var _config_filename: String = "" func _init(config_filename: String): _config_filename = config_filename _cached_config = ConfigFile.new() _cached_config.load(_config_filename) func _set_data(section: String, field: String, value): _cached_config.set_value(section, field, value) _cached_config.save(_config_filename) func _get_data(section: String, field: String, default_value): var result = _cached_config.get_value(section, field) if result == null: result = default_value _cached_config.set_value(section, field, default_value) _cached_config.save(_config_filename) return result
内容的提问来源于stack exchange,提问作者Ankit Kumar Maurya
相关产品推荐
相关产品推荐

