go-common/file/copy.go

37 lines
633 B
Go

package file
import (
"fmt"
"io"
"os"
)
// Copy copies a file from src to dest
func Copy(src, dest string) error {
fi, err := os.Lstat(src)
if err != nil {
return err
}
srcFi, err := os.Open(src)
if err != nil {
return fmt.Errorf("could not open src: %w", err)
}
defer srcFi.Close()
destFi, err := os.Create(dest)
if err != nil {
return fmt.Errorf("could not create dest: %w", err)
}
defer destFi.Close()
if err := os.Chmod(dest, fi.Mode()); err != nil {
return err
}
if _, err := io.Copy(destFi, srcFi); err != nil {
return fmt.Errorf("could not copy %s to %s: %w", src, dest, err)
}
return nil
}