2019-01-05 22:44:33 +00:00
|
|
|
package fileutils
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
2024-08-24 22:02:33 +00:00
|
|
|
"path/filepath"
|
2019-01-05 22:44:33 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// Copy copies a file or folder from one place to another.
|
2024-11-21 00:15:30 +00:00
|
|
|
func CopyHelper(src, dst string) error {
|
2024-08-24 22:02:33 +00:00
|
|
|
src = filepath.Clean(src)
|
|
|
|
if src == "" {
|
2019-01-05 22:44:33 +00:00
|
|
|
return os.ErrNotExist
|
|
|
|
}
|
|
|
|
|
2024-08-24 22:02:33 +00:00
|
|
|
dst = filepath.Clean(dst)
|
|
|
|
if dst == "" {
|
2019-01-05 22:44:33 +00:00
|
|
|
return os.ErrNotExist
|
|
|
|
}
|
|
|
|
|
|
|
|
if src == "/" || dst == "/" {
|
2024-08-24 22:02:33 +00:00
|
|
|
// Prohibit copying from or to the root directory.
|
2019-01-05 22:44:33 +00:00
|
|
|
return os.ErrInvalid
|
|
|
|
}
|
|
|
|
|
|
|
|
if dst == src {
|
|
|
|
return os.ErrInvalid
|
|
|
|
}
|
|
|
|
|
2024-08-24 22:02:33 +00:00
|
|
|
info, err := os.Stat(src)
|
2019-01-05 22:44:33 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
if info.IsDir() {
|
2024-08-24 22:02:33 +00:00
|
|
|
return CopyDir(src, dst)
|
2019-01-05 22:44:33 +00:00
|
|
|
}
|
|
|
|
|
2024-08-24 22:02:33 +00:00
|
|
|
return CopyFile(src, dst)
|
2019-01-05 22:44:33 +00:00
|
|
|
}
|