45 lines
742 B
Go
45 lines
742 B
Go
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
func SaveData1(path string, data []byte) error {
|
|
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0664)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
_, err = file.Write(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return file.Sync()
|
|
}
|
|
|
|
func SaveData2(path string, data []byte) error {
|
|
tmp := fmt.Sprintf("%s.tmp.%d", path, randomInt())
|
|
file, err := os.OpenFile(tmp, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0664)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func () {
|
|
file.Close()
|
|
if err != nil {
|
|
os.Remove(tmp)
|
|
}
|
|
}()
|
|
|
|
if _, err = file.Write(data); err != nil {
|
|
return err
|
|
}
|
|
if err = file.Sync(); err != nil {
|
|
return err
|
|
}
|
|
|
|
err = os.Rename(tmp, path)
|
|
return err
|
|
} |