在你提供的 DelIniConfig
函数中,修改 INI 文件时可能会导致格式变化的原因主要是因为 ini
包的行为。具体来说,在使用 cfg.Section("").Key(delItem).SetValue("")
时,如果 delItem
对应的键不存在,它可能会创建一个新的键并将其值设置为空,这样就会在 INI 文件中生成一行以空格开头的新条目。
为了避免这种情况,并确保该项仅被删除,而不是设置为新值,可以考虑使用更直接的方法来删除该键。例如,使用以下代码片段代替现有的 SetValue
方法:
if cfg.Section("").HasKey(delItem) {
if err := cfg.Section("").DeleteKey(delItem); err != nil {
lc.Errorf("Failed to delete key %s", delItem)
return err
}
}
完整修订后的函数如下:
func DelIniConfig(dir string, filename string, delItem string, lc *logrus.Logger) error {
f := fmt.Sprintf("%s/%s", dir, filename)
lc.Infof("load file %s", f)
if IsFileExisted(f) != true {
lc.Errorf("File %s is not existed", f)
return fmt.Errorf("File %s is not existed", f)
}
cfg, err := ini.Load(f)
if err != nil {
lc.Errorf("load file (%s) failed: %v", f, err)
return err
}
// 检查并删除指定的配置项
if cfg.Section("").HasKey(delItem) {
if err := cfg.Section("").DeleteKey(delItem); err != nil {
lc.Errorf("Failed to delete key %s: %v", delItem, err)
return err
}
}
if err := cfg.SaveTo(f); err != nil {
lc.Errorf("Save config file failed: %v", err)
return err
}
return nil
}
通过这种方式,你可以安全地从 INI 文件中删除指定的键而不影响其他格式。如果要完全清除某个配置项,确保使用正确的方法。希望这对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问