You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:12:42