40 lines
560 B
Go
40 lines
560 B
Go
package utils
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
func CopyFile(src, dst string) error {
|
|
sourceFileStat, err := os.Stat(src)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if !sourceFileStat.Mode().IsRegular() {
|
|
return os.ErrInvalid
|
|
}
|
|
|
|
source, err := os.Open(src)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func() {
|
|
_ = source.Close()
|
|
}()
|
|
|
|
destination, err := os.Create(dst)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func() {
|
|
_ = destination.Close()
|
|
}()
|
|
|
|
if _, err := io.Copy(destination, source); err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.Chmod(dst, sourceFileStat.Mode())
|
|
}
|