37 lines
633 B
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
|
|
}
|