package util import ( "fmt" "io" "os" ) func MoveFile(src, dst string) error { in, err := os.Open(src) if err != nil { return fmt.Errorf("couldn't open source file: %s", err) } out, err := os.Create(dst) if err != nil { in.Close() return fmt.Errorf("couldn't open dest file: %s", err) } defer out.Close() _, err = io.Copy(out, in) in.Close() if err != nil { return fmt.Errorf("writing to output file failed: %s", err) } err = out.Sync() if err != nil { return fmt.Errorf("sync error: %s", err) } si, err := os.Stat(src) if err != nil { return fmt.Errorf("stat error: %s", err) } err = os.Chmod(dst, si.Mode()) if err != nil { return fmt.Errorf("chmod error: %s", err) } err = os.Remove(src) if err != nil { return fmt.Errorf("failed removing original file: %s", err) } return nil }