36 lines
822 B
Go
36 lines
822 B
Go
|
|
// Package util provide some utility functions
|
||
|
|
package util
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"io"
|
||
|
|
"os"
|
||
|
|
)
|
||
|
|
|
||
|
|
// CopyFile define func of copies a file from src to dst.
|
||
|
|
// If the destination file exists, it will be overwritten.
|
||
|
|
func CopyFile(src, dst string) error {
|
||
|
|
sourceFile, err := os.Open(src)
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("failed to open source file %s: %w", src, err)
|
||
|
|
}
|
||
|
|
defer sourceFile.Close()
|
||
|
|
|
||
|
|
destFile, err := os.Create(dst)
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("failed to create destination file %s: %w", dst, err)
|
||
|
|
}
|
||
|
|
defer destFile.Close()
|
||
|
|
|
||
|
|
_, err = io.Copy(destFile, sourceFile)
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("failed to copy file contents from %s to %s: %w", src, dst, err)
|
||
|
|
}
|
||
|
|
|
||
|
|
err = destFile.Sync()
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("failed to sync destination file %s: %w", dst, err)
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|