diff --git a/viper.go b/viper.go index a32ab73..bad2df8 100644 --- a/viper.go +++ b/viper.go @@ -1310,7 +1310,7 @@ func (v *Viper) writeConfig(filename string, force bool) error { flags = os.O_CREATE | os.O_TRUNC | os.O_WRONLY } else { if _, err := os.Stat(filename); os.IsNotExist(err) { - flags = os.O_WRONLY + flags = os.O_CREATE | os.O_WRONLY } else { return fmt.Errorf("File: %s exists. Use WriteConfig to overwrite.", filename) } diff --git a/viper_test.go b/viper_test.go index c8fa1f4..74db59b 100644 --- a/viper_test.go +++ b/viper_test.go @@ -987,6 +987,26 @@ p_ppu = 0.55 p_batters.batter.type = Regular `) +func TestSafeWriteConfigProperties(t *testing.T) { + v := New() + fs := afero.NewMemMapFs() + v.SetFs(fs) + v.SetConfigName("c") + v.SetConfigType("properties") + err := v.ReadConfig(bytes.NewBuffer(propertiesExample)) + if err != nil { + t.Fatal(err) + } + if err := v.SafeWriteConfigAs("c.properties"); err != nil { + t.Fatal(err) + } + read, err := afero.ReadFile(fs, "c.properties") + if err != nil { + t.Fatal(err) + } + assert.Equal(t, propertiesWriteExpected, read) +} + func TestWriteConfigProperties(t *testing.T) { v := New() fs := afero.NewMemMapFs()