I am currently writing some identifiers to a file, last_imported.txt
. Every time I have imported an identifier, I want the file to contain only that.
It looks like ioutil.WriteFile("last_import.txt", []byte(id), 0644)
would do the job, however it randomly leaves the file empty without writing the new identifier when I cancel the job while running, simulating a sudden crash.
I suspect that whenever it leaves it empty, it's because f.write(data)
is never reached.
func WriteFile(filename string, data []byte, perm os.FileMode) error {
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
if err != nil {
return err
}
n, err := f.Write(data)
if err == nil && n < len(data) {
err = io.ErrShortWrite
}
if err1 := f.Close(); err == nil {
err = err1
}
return err
}
How do I make sure that the file will not be left empty?